Aller au contenu
ecdsa.com
Microsoft.IdentityModel.Tokens (.NET).NET

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

Comment corriger l’erreur

  1. 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. 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();

Erreurs associées

Parcourir toute la base de données des erreurs de signature