Zum Inhalt springen
ecdsa.com
Microsoft.IdentityModel.Tokens (.NET).NET

Fehlermeldung

IDX10214: Audience validation failed.

Auch ausgegeben als

  • 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"

8.x kürzt den Text auf „IDX10214: Audience validation failed. See https://aka.ms/identitymodel/app-context-switches “; 6.x und 7.x (geprüft mit 6.36.0 und 7.7.1) listen die Audiences des Tokens und die konfigurierten Werte auf. ASP.NET Core sendet `error_description="The audience '…' is invalid"`.

Microsoft.IdentityModel.Tokens (.NET) — SecurityTokenInvalidAudienceException

Was der Fehler bedeutet

Der Claim `aud` des Tokens passt nicht zu `ValidAudience` / `ValidAudiences` (oder, wenn `Audience` in `JwtBearerOptions` gesetzt ist, zu diesem Wert). Die Signatur war in Ordnung; das Token wurde für einen anderen Empfänger ausgestellt. In Microsoft Entra ID liegt die klassische Abweichung zwischen der App-ID-URI der API (`api://…`, in v1-Tokens verwendet) und ihrer Client-ID als GUID (in v2-Tokens verwendet).

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Bezeichner deiner API explizit auflisten

    Akzeptiere die Client-ID und die App-ID-URI deiner API, wenn beide Token-Versionen im Einsatz sind – sonst nichts.

    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.

    Scope deiner API anfordern

    Tokens für `api://orders/Orders.Read` tragen deine API als Audience. Mache in der App-Registrierung einen Scope verfügbar und lass die Clients ihn anfordern.

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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen