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
App-ID-URI vs. Client-ID
häufigEntra ID schreibt die Client-ID in `aud`, wenn das Manifest der API v2.0-Tokens anfordert (`requestedAccessTokenVersion: 2`, im älteren Manifestformat `accessTokenAcceptedVersion` genannt), und bei v1.0-Tokens die App-ID-URI. Eine API, die nur mit einem der beiden Werte konfiguriert ist, lehnt den anderen ab.
Der Client hat ein Token für eine andere API angefordert
häufigScopes bestimmen die Audience. Ein Client, der `User.Read` anfordert, erhält ein Token für Microsoft Graph (`aud` = `https://graph.microsoft.com` oder `00000003-0000-0000-c000-000000000000`), das deine API ablehnen muss.
Weiterleitung eines ID-Tokens oder Graph-Tokens
gelegentlichFrontends senden manchmal das ID-Token (Audience = die Client-App) oder das Graph-Token, das sie ohnehin schon haben. Keines von beiden ist für deine API bestimmt.
So behebst du den Fehler
- 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.
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();