Mensagem de erro
IDX10214: Audience validation failed.
Também aparece como
- 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"
A versão 8.x encurta o texto para “IDX10214: Audience validation failed. See https://aka.ms/identitymodel/app-context-switches ”; as versões 6.x e 7.x (verificadas na 6.36.0 e na 7.7.1) listam os públicos-alvo do token e os valores configurados. O ASP.NET Core envia `error_description="The audience '…' is invalid"`.
Microsoft.IdentityModel.Tokens (.NET) — SecurityTokenInvalidAudienceException
O que significa
O `aud` do token não corresponde a `ValidAudience` / `ValidAudiences` (ou, com `Audience` definido em `JwtBearerOptions`, a esse valor). A assinatura estava correta; o token foi emitido para outro destinatário. No Microsoft Entra ID, a divergência clássica é entre o App ID URI da API (`api://…`, usado em tokens v1) e o GUID do ID do cliente dela (usado em tokens v2).
Por que acontece
App ID URI vs. ID do cliente
comumO Entra ID coloca o ID do cliente em `aud` quando o manifesto da API solicita tokens v2.0 (`requestedAccessTokenVersion: 2`, chamado `accessTokenAcceptedVersion` no formato de manifesto mais antigo), e o App ID URI nos tokens v1.0. Uma API configurada com apenas um dos dois rejeita o outro.
O cliente solicitou um token para outra API
comumOs escopos determinam o público-alvo. Um cliente que pede `User.Read` recebe um token do Microsoft Graph (`aud` = `https://graph.microsoft.com` ou `00000003-0000-0000-c000-000000000000`), que sua API deve rejeitar.
Encaminhamento de um token de ID ou de um token do Graph
ocasionalFront-ends às vezes enviam o token de ID (público-alvo = o aplicativo cliente) ou o token do Graph que já têm. Nenhum dos dois se destina à sua API.
Como corrigir
- 1.
Listar explicitamente os identificadores da sua API
Aceite o ID do cliente e o App ID URI da sua API, se as duas versões de token estiverem em uso — e nada mais.
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.
Solicitar um escopo da sua API
Tokens para `api://orders/Orders.Read` trazem sua API como público-alvo. Exponha um escopo no registro de aplicativo e faça os clientes solicitarem esse escopo.
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();