2017-06-20 1 views
0

Sie möchten den MSAL-Client-Flow verwenden, um den Zugriff auf eine Azure-Funktion zu autorisieren, die ich für die Verwendung der Microsoft-Authentifizierung konfiguriert habe.MSAL Client-Flow Azure-Funktion in Xamarin-Formularen

Ich habe die neueste Vorschau des MSAL hinzufügen und anmelden können und Zugriff auf die API

Graph gewinnen
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); 

Irgendwelche Ideen wäre hilfreich, wenn ich auf die Auth-Seite im Browser navigieren ich der serverseitige Fluss. Aber die obige Client-Anfrage liefert immer einen 401-Fehler, die Dokumentation ist überall und ich versuchte, den Mobile App Service zu vermeiden.

Antwort

0

Von Client-managed authentication - Live SDK, konnten wir feststellen, dass Sie die folgende Nutzlast für die Protokollierung übergeben müssen:

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

Dann habe ich LiveSDK geprüft und versucht, die LiveConnectSession.AuthenticationToken durch den Aufruf LiveLoginResult.Session.AuthenticationToken abzurufen, aber es gibt null zurück.

Dann habe ich die Server-Flow-Authentifizierung für Microsoft-Konto überprüft, und finden Sie es würde Live SDK REST API - Signing users in with REST verwenden. Ich habe versucht, die Authentifizierungsanfrage über den Postboten zu simulieren, um dieses Problem zu überprüfen. Hier ist mein Test zum Abrufen des Zugriffstoken:

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

Wie Sie sehen konnten, konnten wir nicht die authentication_token abrufen wie im offiziellen Dokument über Get an access token and an authentication token erwähnt.

Dann habe ich versucht, die access_token für die Protokollierung wie folgt zu verwenden, und festgestellt, dass es funktionieren könnte.

enter image description here

Suche MSAL Client Fluss zu verwenden, um Zugang zu einer Azure-Funktion zu genehmigen, die ich konfiguriert haben Microsoft-Authentifizierung zu verwenden.

Für MSAL, könnten Sie finden es Anforderung an dem folgenden Endpunkt und sowohl {"authenticationToken":"App.TokenRequest.AccessToken"} und {"access_token":"App.TokenRequest.AccessToken"} Nutzlast konnte nicht erfolgreich anmelden senden würde.

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

Per meinem Test, da die Authentifizierung/Autorisierung für Microsoft die verschiedenen Authentifizierungs Endpunkte verwendet, die von den einzelnen Endpunkten generierte Token nicht miteinander angewendet werden könnte.

Basierend auf meinem Test können Sie einfach Ihre App unter Microsoft Account Developer Center erstellen und Authentifizierungsinformationen für Ihre azure-Funktion hinzufügen. Für Ihren Client können Sie LiveSDK [veraltet] oder OneDrive SDK for CSharp für die MSA-Protokollierung verwenden und die access_token zur Protokollierung mit Ihrer azure-Funktions-App abrufen.Hier ist mein UWP-Client für Microsoft Onedrive mit SDK anmelden, können Sie sich darauf beziehen:

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

Für MsaAuthenticationProvider, Sie Authentication Adapter for the OneDrive SDK beziehen könnten.

+0

Ich werde die onedrive sdk ein gehen, aber es sieht aus wie das Herz des Problems ist, da MSAL zielt auf den neuen Endpunkt, kann ich nicht die einfache Berechtigung, die ich auf dem App-Dienst im Portal einrichten kann . Kann ich sowohl das Work- als auch das Privatkonto im OneDrive SDK verwenden? – snowCrabs

+0

Gemäß meinem Test für Apps, die unter [Microsoft Application Registration Portal] (https://apps.dev.microsoft.com/) registriert sind, würde es mit Microsoft-Konto funktionieren. Für Apps, die unter [Microsoft Azure Active Directory] (https://manage.windowsazure.com/) registriert sind, werden die Benutzer von Arbeit oder Schule für Ihren Mandanten unterstützt. Weitere Informationen finden Sie unter [Authentifizierungsadapter für das OneDrive SDK] (https://github.com/OneDrive/onedrive-sdk-dotnet-msa-auth-adapter). –

+1

Soweit ich weiß, konnte MSAL vorerst nicht mit der Authentifizierung/Autorisierung von Azure App Service arbeiten. –

Verwandte Themen