AuthenticationContext.AcquireTokenAsync nouveau en C #

Je suis nouveau sur Azure et j’aimerais pouvoir, par programme, obtenir un jeton d’Azure. Quoi que je fasse cependant, cela semble échouer – quelqu’un a-t-il un exemple concret? Merci les gars

J’appelle GetAToken().Wait(); .

et la méthode est:

 public async Task GetAToken() { // authentication parameters ssortingng clientID = "*********"; ssortingng username = ""; ssortingng password = ""; ssortingng directoryName = ""; ClientCredential cc = new ClientCredential(clientID, password); var authenticationContext = new AuthenticationContext("https://login.windows.net/" + directoryName); AuthenticationResult result = await authenticationContext.AcquireTokenAsync("https://management.core.windows.net/", cc); if (result == null) { throw new InvalidOperationException("Failed to obtain the JWT token"); } ssortingng token = result.AccessToken; return token; } 

Donc, ne savez pas si vous le faites sur Android, iOS ou Xamarin.Forms. Voici comment je vais m’authentifier avec ADAL et Azure (le code fonctionne de mon côté):

Sur Android:

 public async Task Authenticate(Activity context, ssortingng authority, ssortingng resource, ssortingng clientId, ssortingng returnUri) { var authContext = new AuthenticationContext(authority); if (authContext.TokenCache.ReadItems().Any()) authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority); var uri = new Uri(returnUri); var platformParams = new PlatformParameters(context); try { var authResult = await authContext.AcquireTokenAsync(resource, clientId, uri, platformParams); return authResult; } catch (AdalException e) { return null; } } 

Sur iOS:

 public async Task Authenticate(UIViewController controller, ssortingng authority, ssortingng resource, ssortingng clientId, ssortingng returnUri) { var authContext = new AuthenticationContext(authority); if (authContext.TokenCache.ReadItems().Any()) authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority); var controller = UIApplication.SharedApplication.KeyWindow.RootViewController; var uri = new Uri(returnUri); var platformParams = new PlatformParameters(controller); try { var authResult = await authContext.AcquireTokenAsync(resource, clientId, uri, platformParams); return authResult; } catch (AdalException e) { return null; } } 

Sur UWP :

 public async Task Authenticate(ssortingng authority, ssortingng resource, ssortingng clientId, ssortingng returnUri) { var authContext = new AuthenticationContext(authority); if (authContext.TokenCache.ReadItems().Any()) authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority); var uri = new Uri(returnUri); var platformParams = new PlatformParameters(PromptBehavior.Auto); try { var authResult = await authContext.AcquireTokenAsync(resource, clientId, uri, platformParams); return authResult; } catch (AdalException e) { return null; } } 

Variable que je passe dans les méthodes ci-dessus:

 ssortingng authority = "https://login.windows.net/common"; ssortingng ResourceID = "Backend ClientId";//Backend (web app) ssortingng clientId = "Native App ClientId";//native app ssortingng returnUri = "https://{My Azure Site}.azureewebsites.net/.auth/login/done"; 

Si vous voulez faire cela dans Xamarin.Forms, vous trouverez ci-dessous des liens vers ma solution GitHub où j’ai exposé ces méthodes via DependencyService .

  • Mise en œuvre de PCL
  • implémentation iOS
  • Implémentation Android

J’espère que ça aide! Si vous obtenez des erreurs dans votre réponse, vérifiez que vos permissions sont correctement configurées dans Azure. Je le fais comme ça . Le livre Xamarin / Azure d’Adrian Hall est une autre ressource précieuse.

EDIT: Ajout de trucs UWP

Si vous essayez d’appeler les API Azure comme vous le souhaitez, vous devez procéder différemment.

  1. Créer une application dans Azure AD disposant des permissions pour accéder à l’API Azure
    1. Si vous souhaitez appeler l’API Service Management, ajoutez-le en tant qu’autorisation.
      1. Vous pouvez également utiliser un certificate de gestion.
    2. Si vous souhaitez appeler l’API Resource Management, ajoutez les permissions nécessaires au principal du service via le nouveau portail.
  2. Si vous avez choisi la méthode déléguée pour l’API Service Management (la première option), vous devrez alors:
    1. Demander à l’utilisateur de s’authentifier auprès d’Azure AD avec le stream d’octroi de codes d’autorisation
    2. Ou obtenez le jeton d’access à l’aide du stream d’octroi de mot de passe (vous pouvez en voir un exemple dans une autre réponse).
  3. Si, à la place, vous choisissez un certificate de gestion ou accordez les permissions au principal du service, vous pouvez obtenir le jeton d’access directement à partir d’Azure AD à l’aide du stream d’octroi d’informations d’identification du client.

Au final, vous obtiendrez toujours un jeton d’access que vous pourrez utiliser pour appeler l’API.