Message d’erreur
IDX10214: Audience validation failed.
Également affiché sous la forme
- IDX10214: Audience validation failed. Audiences: 'api://billing'. Did not match: validationParameters.ValidAudience: 'api://orders' or validationParameters.ValidAudiences: 'null'.
- Bearer error="invalid_token", error_description="The audience 'api://billing' is invalid"
La version 8.x raccourcit le texte en « IDX10214: Audience validation failed. See https://aka.ms/identitymodel/app-context-switches » ; les versions 6.x et 7.x (vérifiées sur 6.36.0 et 7.7.1) listent les audiences du jeton et les valeurs configurées. ASP.NET Core envoie `error_description="The audience '…' is invalid"`.
Microsoft.IdentityModel.Tokens (.NET) — SecurityTokenInvalidAudienceException
Ce que cela signifie
Le claim `aud` du jeton ne correspond pas à `ValidAudience` / `ValidAudiences` (ni, lorsque `Audience` est défini dans `JwtBearerOptions`, à cette valeur). La signature était correcte ; le jeton a été émis pour un autre destinataire. Dans Microsoft Entra ID, la non-concordance classique oppose l’URI d’ID d’application de l’API (`api://…`, utilisé dans les jetons v1) à son ID client sous forme de GUID (utilisé dans les jetons v2).
Pourquoi cela se produit
Confusion entre l’URI d’ID d’application et l’ID client
fréquenteEntra ID place l’ID client dans `aud` lorsque le manifeste de l’API demande des jetons v2.0 (`requestedAccessTokenVersion: 2`, appelé `accessTokenAcceptedVersion` dans l’ancien format de manifeste), et l’URI d’ID d’application pour les jetons v1.0. Une API configurée avec un seul des deux rejette l’autre.
Le client a demandé un jeton pour une autre API
fréquenteLes scopes déterminent l’audience. Un client qui demande `User.Read` obtient un jeton Microsoft Graph (`aud` = `https://graph.microsoft.com` ou `00000003-0000-0000-c000-000000000000`), que votre API doit rejeter.
Transfert d’un jeton d’ID ou d’un jeton Graph
occasionnelleLes front-ends envoient parfois le jeton d’ID (audience = l’application cliente) ou le jeton Graph qu’ils détiennent déjà. Ni l’un ni l’autre n’est destiné à votre API.
Comment corriger l’erreur
- 1.
Lister explicitement les identifiants de votre API
Acceptez l’ID client et l’URI d’ID d’application de votre API si les deux versions de jeton sont utilisées, et rien d’autre.
csharp options.TokenValidationParameters = new TokenValidationParameters { ValidIssuer = "https://login.microsoftonline.com/<tenant-id>/v2.0", // Entra ID v2 tokens carry the client ID; v1 tokens the App ID URI. Accept exactly your API's identifiers. ValidAudiences = ["00000000-0000-0000-0000-000000000000", "api://orders"], }; - 2.
Demander un scope de votre API
Les jetons pour `api://orders/Orders.Read` portent votre API comme audience. Exposez un scope dans l’inscription d’application et faites-le demander par les clients.
csharp // Client: request a scope of YOUR API, not Microsoft Graph, so aud is your API. var result = await app.AcquireTokenSilent(new[] { "api://orders/Orders.Read" }, account).ExecuteAsync();