Microsoft Graph - Le jeton ne contient aucune permission, ou les permissions ne peuvent pas être comprises

Microsoft Graph - Le jeton ne contient aucune permission, ou les permissions ne peuvent pas être comprises


Source : Stack Overflow [office365]

Pour vous assurer que cela fonctionne comme prévu, vous devriez indiquer explicitement pour quel locataire vous souhaitez obtenir le jeton d’accès. (Dans ce locataire, l’application devrait, bien entendu, avoir déjà obtenu le consentement administrateur.)

Au lieu du point de terminaison de jeton “common”, utilisez un point de terminaison spécifique au locataire :

string url = "https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token";

(Où {tenant-id} est soit l’identifiant du locataire (un Guid), soit tout nom de domaine vérifié.)

Je recommanderais également fortement de ne pas construire la requête de jeton vous-même, comme vous le montrez dans votre question. Cela peut être utile à des fins éducatives, mais sera généralement peu sûr et sujet aux erreurs à long terme.

Il existe diverses bibliothèques que vous pouvez utiliser à la place. Ci-dessous, un exemple utilisant la Microsoft Authentication Library (MSAL) pour .NET :

// client_secret retrieved from secure storage (e.g. Key Vault)
string tenant_id = "contoso.onmicrosoft.com";
ConfidentialClientApplication client = new ConfidentialClientApplication(
    client_id,
    $"https://login.microsoftonline.com/{tenant_id}/",
    "https://dummy.example.com", // Not used, can be any valid URI
    new ClientCredential(client_secret),
    null, // Not used for pure client credentials
    new TokenCache());

string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
AuthenticationResult result = client.AcquireTokenForClientAsync(scopes).Result
string token = result.AccessToken;
// ... use token