I Mobile App Services supportano l'autenticazione federata tramite molteplici provider, quali Twitter, Facebook, Microsoft Account, Google e Azure Active Directory. L'SDK (sia lato client che server) permette di interfacciarsi tramite questi provider con pochissimi passi, e senza che siamo costretti a conoscere i dettagli implementativi del protocollo OAuth. Tutto ciò che dobbiamo fare è seguire i passaggi descritti nella documentazione a questo indirizzo:
http://aspit.co/a7c
Le operazioni di autenticazione vengono gestite da un servizio chiamato Gateway che si occupa di acquisire un token dal provider selezionato e di utilizzarlo per rilasciare il cosiddetto Zumo-Token, utilizzato per autenticare le richieste provenienti dal device.
Uno dei compiti del Gateway è anche quello di mantenere un database con i token del provider esterno, così che questi possano essere utilizzati per impersonare l'utente in una chiamata. Immaginiamo per esempio di avere un utente autenticato con Twitter e di voler effettuare un tweet con il suo account. LinqToTwitter è una libreria che rende molto semplice questa operazione, ed è disponibile tramite NuGet:
install-package LinqToTwitter
Il primo passo è quello di interrogare il Gateway e recuperare il token originariamente emesso da Twitter, che contiene a sua volta l'AccessToken e l'AccessTokenSecret necessari per la chiamata.
var credentials = await ((MobileAppUser)this.User) .GetIdentityAsync<TwitterCredentials>();
A questo punto possiamo costruire un IAuthorizer, ossia il componente di LinqToTwitter che incapsula le credenziali utente e della nostra app:
var authorizer = new SingleUserAuthorizer() { CredentialStore = new SingleUserInMemoryCredentialStore() { ConsumerKey = "<put your ConsumerKey here>", ConsumerSecret = "<put your ConsumerSecret here>", AccessToken = credentials.AccessToken, AccessTokenSecret = credentials.AccessTokenSecret } };
Possiamo recuperare AccessToken e AccessTokenSecret dalle credenziali ottenute in precedenza, mentre ConsumerKey e ConsumerSecret sono le chiavi fornite da Twitter quando abbiamo registrato l'app presso il portale sviluppatori.
Grazie a questo componente, siamo finalmente pronti a inviare il tweet tramite il metodo TweetAsync di TwitterContext.
var context = new TwitterContext(authorizer); await context.TweetAsync("Hello World! This is a test tweet!");
Ovviamente, affinché questa operazione abbia successo, è necessario che l'app sia configurata con diritti di scrittura sulla timeline dell'utente.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sfruttare al massimo i topic space di Event Grid MQTT
Ottenere il contenuto di una cartella FTP con la libreria FluentFTP
Installare le Web App site extension tramite una pipeline di Azure DevOps
Specificare il versioning nel path degli URL in ASP.NET Web API
Generare token per autenicarsi sulle API di GitHub
Utilizzare la session affinity con Azure Container Apps
Accesso sicuro ai secrets attraverso i file in Azure Container Apps
Sostituire la GitHub Action di login su private registry
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Usare lo spread operator con i collection initializer in C#
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Recuperare un elemento inserito nella cache del browser tramite API JavaScript