2017-09-28 5 views
2

Ich habe eine Mobile App und möchte die Microsoft Graph-API für die Authentifizierung verwenden. Ich verwende den Microsoft.Identity.Client-Namespace. Ich dort ein Token erwerben kann durchMicrosoft Graph-API und Azure Mobile Apps

authResult = await App.PublicClientApp.AcquireTokenAsync(_scopes); 

Aufruf Als ich dieses Token an meinen Handy-App vorbei

azureUser = await App.MobileService.LoginWithMicrosoftAccountAsync(authResult.AccessToken); 

Aufruf erhalte ich eine MobileServiceInvalidOperationException "Sie haben keine Berechtigung dieses Verzeichnis oder Seite zu sehen ".

Ich habe meine App im Application Registration Portal registriert. Registration Portal

in Azure sieht es wie folgt aus: Azure Portal

Was di ich falsch ???

Mit freundlichen Grüßen

Martin

Antwort

2

Der Easy Auth unterstützt nicht das Token Austausch von Azure AD V2.0 ausgegeben mit dem Zugriffstoken (In diesem Fall MSAL Bibliothek verwendet).

Um den Client-Flow für den mobilen Client zu verwenden, können Sie die OneDrive-Authentifizierungsbibliothek zum Abrufen des Tokens vom Endpunkt für Microsoft-Konto verwenden. Hier ist ein ähnliches Gewinde für Ihre Referenz:

Desktop client flow for MicrosoftAccount access to Azure Mobile Service API

Und unten ist der Code funktioniert gut für mich:

public async Task TestEasyAuthAsync() 
{ 

    string acess_token = await AcquireTokenForLiveAccount(); 
    string applicationUrl = "https://mobilefei.azurewebsites.net/"; 
    var mobileClient = new MobileServiceClient(applicationUrl); 

    JObject token = new JObject(); 
    token.Add("access_token", acess_token); 
    var user = await mobileClient.LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount, token); 
    Console.WriteLine($"UserID:\n{user.UserId}"); 

    var result = await mobileClient.InvokeApiAsync(@"/.auth/me"); 
    Console.Read(); 
} 

public async Task<string> AcquireTokenForLiveAccount() 
{ 
    var msAuth = new MsaAuthenticationProvider("57336bd5-a80f-4b48-a29a-07fdea6ef91e", "https://login.microsoftonline.com/common/oauth2/nativeclient", new string[] { "wl.signin", "wl.offline_access" }); 
    await msAuth.AuthenticateUserAsync(); 
    return msAuth.CurrentAccountSession.AccessToken; 
} 
+0

Hallo, Sie meinen Tag! Es klappt! vielen Dank! Noch eine Frage :-(Ich muss den Zugriff auf diese Rechte bestätigen: automatische Anmeldung, immer Zugriff auf Informationen, Basisprofil für die App, jedes Mal wenn ich mich anmelde. Wie kann es gespeichert werden? Vielen Dank im Voraus, Martin –

+0

Das Problem scheint in Bezug auf die Art der App-Register. Um dieses Problem zu beheben, können Sie eine ** Live SDK-Anwendungen ** anstelle von ** Konvergente Anwendungen ** registrieren. Dann können Sie den öffentlichen MsaAuthenticationProvider (Zeichenfolge clientId , String clientSecret, String returnUrl, string [] scopes, CredentialCache credentialCache); 'zu einer neuen' MsaAuthenticationProvider'-Klasse mit dem Secret. –

Verwandte Themen