2017-06-20 5 views
0

Vous souhaitez utiliser le flux de client MSAL pour obtenir l'autorisation d'accès à une fonction Azure que j'ai configurée pour utiliser l'authentification Microsoft.Flux de client MSAL Fonction Azure dans Xamarin Forms

J'ai ajouter le dernier aperçu du MSAL et peut se connecter et accéder à l'API Graph

App.TokenRequest = await App.IdentityClientApp.AcquireTokenAsync(App.Scopes,App.UiParent) 
var client = new System.Net.Http.HttpClient(); 
var request = new HttpRequestMessage(HttpMethod.Post, "https://{my site url}/.auth/login/microsoftaccount"); 

request.Content = new StringContent(JsonConvert.SerializeObject(new TokenContent { access_token= App.TokenRequest.AccessToken })); 
var response = await client.SendAsync(request); 

Toutes les idées seraient utiles, lorsque je navigue sur la page auth dans le navigateur je reçois le flux côté serveur. mais la requête client ci-dessus génère toujours une erreur 401, la documentation est partout et j'essayais d'éviter d'utiliser le Mobile App Service.

Répondre

0

De Client-managed authentication - Live SDK, nous pourrions trouver que vous devez passer la charge utile suivante pour l'enregistrement:

{"authenticationToken":"{Live-SDK-session-authentication-token}"} 

Ensuite, j'ai vérifié LiveSDK et a essayé de récupérer le LiveConnectSession.AuthenticationToken en appelant LiveLoginResult.Session.AuthenticationToken, mais il renvoie null.

Ensuite, j'ai vérifié l'authentification du flux de serveur pour le compte Microsoft, et j'ai trouvé qu'il utilisait Live SDK REST API - Signing users in with REST. J'ai essayé de simuler la demande d'authentification via le facteur pour vérifier ce problème. Voici mon test pour récupérer le jeton d'accès:

https://login.live.com/oauth20_authorize.srf?client_id={client-id}&redirect_uri={return-url}&response_type=code&scope=wl.basic+wl.offline_access+wl.signin

enter image description here

Comme vous pouvez le voir, nous ne pouvions pas récupérer le authentication_token comme mentionné dans le document officiel au sujet Get an access token and an authentication token.

Puis, j'ai essayé d'utiliser le access_token pour la journalisation comme suit, et j'ai trouvé que cela pouvait fonctionner.

enter image description here

Vous cherchez à utiliser le flux de clients MSAL pour obtenir d'autoriser l'accès à une Azure fonction que j'ai configuré pour utiliser l'authentification Microsoft.

Pour MSAL, vous pouvez le trouver enverrait la demande contre le point final suivant et les deux {"authenticationToken":"App.TokenRequest.AccessToken"} et {"access_token":"App.TokenRequest.AccessToken"} charge utile ne pouvait pas se connecter avec succès.

https://login.microsoftonline.com/common/oauth2/v2.0/authorize

par mon test, étant donné que l'authentification/autorisation de Microsoft utilise les différents critères d'authentification, le jeton généré par chaque points de terminaison ne peut pas être appliqué à l'autre. Basé sur mon test, vous pouvez simplement créer votre application au Microsoft Account Developer Center et ajouter des informations d'authentification pour votre application de fonction Azur. Pour votre client, vous pouvez utiliser LiveSDK [obsolète] ou OneDrive SDK for CSharp pour la journalisation MSA et récupérer le access_token pour vous connecter avec votre application de fonction azur.Voici mon client UWP pour se connecter avec SDK onedrive, vous pouvez vous y référer:

var msAuth = new MsaAuthenticationProvider(
    "{app-Id}", //application id of your app 
    "urn:ietf:wg:oauth:2.0:oob", //the redirect url for your native application in your app 
    new string[] { "wl.signin", "offline_access" }); 
await msAuth.AuthenticateUserAsync(); 

enter image description here

Pour MsaAuthenticationProvider, vous pouvez consulter à Authentication Adapter for the OneDrive SDK.

+0

Je vais essayer l'onedrive sdk, mais il semble que le cœur du problème est que MSAL cible le nouveau point de terminaison, je ne peux pas utiliser l'autorisation facile que je peux configurer sur le service App dans le portail . Puis-je utiliser des comptes Work et Personal dans le OneDrive SDK? – snowCrabs

+0

Par mon test, pour les applications enregistrées sur [Microsoft Application Registration Portal] (https://apps.dev.microsoft.com/), cela fonctionnerait avec le compte Microsoft. Pour les applications enregistrées sur [Microsoft Azure Active Directory] (https://manage.windowsazure.com/), les utilisateurs professionnels ou scolaires de votre client sont pris en charge. Pour plus de détails, vous pouvez vous reporter à [Adaptateur d'authentification pour le SDK OneDrive] (https://github.com/OneDrive/onedrive-sdk-dotnet-msa-auth-adapter). –

+1

Pour autant que je sache, MSAL ne pouvait pas fonctionner avec l'authentification/autorisation d'Azure App Service pour le moment. –