2017-09-28 4 views
2

J'ai une application mobile et je souhaite utiliser l'API Microsoft Graph pour l'authentification. J'utilise l'espace de noms Microsoft.Identity.Client. Je peux acquérir un jeton il en appelantMicrosoft Graph-API et Azure Mobile Apps

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

Quand je passe ce jeton à mon Mobile-App en appelant

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

Je reçois un MobileServiceInvalidOperationException "Vous n'êtes pas autorisé à afficher ce répertoire ou une page ". J'ai enregistré mon application dans le portail d'enregistrement des demandes. Registration Portal

dans Azure, il ressemble à ceci: Azure Portal

Que di me trompe ???

Cordialement,

Martin

Répondre

2

Easy Auth ne gère pas l'échange du jeton à l'aide du jeton d'accès émis par Azure AD V2.0 (Dans ce cas, utilisé bibliothèque MSAL).

Pour utiliser le flux client pour le client mobile, vous pouvez utiliser la bibliothèque d'authentification OneDrive pour acquérir le jeton à partir du point de terminaison pour le compte Microsoft. Voici un fil similaire pour votre référence:

Desktop client flow for MicrosoftAccount access to Azure Mobile Service API

Et ci-dessous est le code fonctionne bien pour moi:

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

Salut, Vous avez fait ma journée! Ça marche! Merci beaucoup! Une question de plus :-(Je dois confirmer l'accès de ces droits: connexion automatique, toujours l'accès à l'information, profil de base pour l'App, chaque fois que je me connecte. Comment peut-il être stocké? Merci d'avance, Martin –

+0

Le problème semble être relatif au type de registre d'application Pour résoudre ce problème, vous pouvez enregistrer ** des applications ** Live SDK ** au lieu de ** ** applications convergées ** Ensuite, vous pouvez utiliser le public MsaAuthenticationProvider (string clientId , string clientSecret, chaîne returnUrl, string [] étendues, CredentialCache credentialCache); 'à une nouvelle classe 'MsaAuthenticationProvider' avec le secret. –