Mensagem de erro
IDX10205: Issuer validation failed. Issuer: 'https://sts.windows.net/
Também aparece como
- IDX10205: Issuer validation failed.
- Bearer error="invalid_token", error_description="The issuer 'https://sts.windows.net/00000000-0000-0000-0000-000000000000/' is invalid"
O texto continua com “Did not match: validationParameters.ValidIssuer: '…' or validationParameters.ValidIssuers: '…' or validationParameters.ConfigurationManager.CurrentConfiguration.Issuer: '…'”. O ASP.NET Core envia `error_description="The issuer '…' is invalid"`.
Microsoft.IdentityModel.Tokens (.NET) — SecurityTokenInvalidIssuerException
O que significa
O `iss` do token não é igual a `ValidIssuer`, a nenhuma entrada de `ValidIssuers` nem ao emissor da configuração OpenID baixada. A mensagem imprime o emissor do token e todos os valores com que ele foi comparado. No Microsoft Entra ID, o caso clássico é um token v1.0 (`https://sts.windows.net/<tenant>/`) comparado com o emissor v2.0 (`https://login.microsoftonline.com/<tenant>/v2.0`), ou o contrário.
Por que acontece
Token v1.0 do Entra ID, emissor v2.0 (ou o contrário)
comumQuem decide a versão do token é o registro de aplicativo da API (`requestedAccessTokenVersion`), não o endpoint que o cliente usou. Uma API que espera v2.0 recebe tokens v1.0 até que o manifesto diga o contrário.
Um token de outro locatário
comumAplicativos multilocatários recebem tokens cujo emissor contém o ID do locatário do usuário. Um único `ValidIssuer` aceita apenas um locatário; APIs multilocatárias precisam de um validador de emissor que confira o locatário em uma lista de locatários permitidos.
Diferença de grafia
ocasionalA comparação de strings é exata: barra final, host em maiúsculas, sufixo `/v2.0`, caminho de política do B2C. Copie o valor do documento de descoberta.
Como corrigir
- 1.
Corrigir a versão do token na origem
Definir `requestedAccessTokenVersion` como 2 no manifesto da API faz o Entra ID emitir tokens v2.0 com o emissor `login.microsoftonline.com/…/v2.0`.
json // App registration manifest of the API: issue v2.0 access tokens { "api": { "requestedAccessTokenVersion": 2 } } - 2.
Aceitar os dois emissores durante uma migração
Liste as duas formas do emissor do seu próprio locatário — nunca aceite emissores arbitrários para fazer o erro desaparecer.
csharp options.TokenValidationParameters = new TokenValidationParameters { ValidIssuers = [ $"https://login.microsoftonline.com/{tenantId}/v2.0", $"https://sts.windows.net/{tenantId}/", // only while v1.0 tokens are still in circulation ], };