3
votes

Accéder à l'API Microsoft Graph depuis Azure B2C

J'ai un locataire Azure AD B2C avec une application en cours d'exécution. Il est configuré pour utiliser uniquement Azure AD et les comptes Microsoft pour se connecter. Cette application est utilisée par App Center Auth.

Je souhaite accéder à certaines API Microsoft (API Microsoft Graph, API Azure DevOps) depuis mon application mobile avec la même connexion. Par conséquent, j'ai ajouté les autorisations d'API (Azure DevOps -> user_impersonation et Microsoft Graph -> User.Read) à mon application dans mon locataire Azure AD (pas le locataire B2C) pour accorder ces autorisations lors de la connexion.

Si j'essaye maintenant d'utiliser le jeton d'accès après la connexion dans mon application pour accéder par exemple à l'utilisateur dans Microsoft Graph, j'obtiens une erreur non autorisée.

var graphAPIEndpoint = "https://graph.microsoft.com/v1.0/me";
var scopes = new[] { "user.read" };

var client = new HttpClient();

var request = new HttpRequestMessage(HttpMethod.Get, graphAPIEndpoint + "/photo/$value");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await client.SendAsync(request);
var image = await response.Content.ReadAsByteArrayAsync();

UserImage.Source = ImageSource.FromStream(() => new MemoryStream(image));

Dans la même méthode, j'essaie d'obtenir la photo de l'utilisateur de Microsoft Graph

// Sign-in succeeded, UserInformation is not null.
var userInfo = await Auth.SignInAsync();

// Get tokens. They are not null.
var idToken = userInfo.IdToken;
var accessToken = userInfo.AccessToken;

Quelqu'un at-il un conseil sur la façon de configurer l'application B2C / Azure AD pour accéder à ces API avec le jeton d'accès? Ou suis-je sur le mauvais chemin?


1 commentaires

Voici la documentation pour cela: docs.microsoft.com/en-us/azure/active-directory-b2c/… . Et vous ne pouvez pas utiliser l'API MS Graph, vous devez utiliser l'API Graph AAD.


3 Réponses :


1
votes

Tout comme @juunas l'a dit, à partir d'aujourd'hui, vous devez utiliser l'API AAD Graph pour accéder au locataire Azure AD B2C, ce qui est différent de l'API Microsoft Graph.

Voici le document pour cela: https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet


0 commentaires

1
votes

Jetez un œil à cette documentation publiée sur l'utilisation de l'API Microsoft Graph et l'authentification par rapport à celle-ci pour les instances B2C:

https://docs.microsoft.com/en-us/azure/active-directory-b2c/microsoft-graph-get-started?tabs=applications

Avec la migration récente de login.microsoftonline.com vers *.b2clogin.com , si vous utilisez MSAL pour obtenir le jeton d'authentification de l'instance AAD B2C, vous devez remplacer la configuration d'autorité et désactiver la validation d'autorité, conformément à ce document:

https://docs.microsoft.com/bs-latn-ba/azure/active-directory/develop/msal-b2c-overview

En JavaScript, cela se fait comme ci-dessous:

 const msalConfig = {
     auth: {
         clientId: "e760cab2-b9a1-4c0d-86fb-ff7084abd902" //This is your client/application ID
         authority: "https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/b2c_1_susi", //This is your tenant info
         validateAuthority: false
     },
 };

 // create UserAgentApplication instance
 const myMSALObj = new Msal.UserAgentApplication(msalConfig);

En C # avec la bibliothèque MSAL.NET, cela serait fait avec l'URL d'autorité transmise au constructeur de classe PublicClientApplication .


0 commentaires

0
votes

J'ai pu utiliser l'API Graph REST en suivant les étapes ci-dessous,

  1. Obtenez le jeton d'accès, URL POST: https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token form-data: {"client_id": <Registered application clientId>, "client_secret": <Registered application generated secret>, "scope": "https://graph.microsoft.com/.default", "grant_type": "client_credentials"

    Réponse: {"token_type" : "", "expires_in" : "", "ext_expires_in" : "", "access_token" : ""}

    REMARQUE: l'application enregistrée dans b2c tenant doit avoir des autorisations requises pour accéder à l'API Graph

  2. Passer le jeton pour accéder aux ressources de l'API, ex: pour obtenir les détails de l'utilisateur avec objectId,

    OBTENIR l'URL: https://graph.microsoft.com/v1.0/users/{objectId}

    définir la clé d'en-tête

      "Authorization": "Bearer " ++ {access_token from above step 1.>
    


0 commentaires