Mensagem de erro
jwt audience invalid. expected: <audience>
O trecho variável da mensagem recebe o valor que você configurou, por exemplo, “jwt audience invalid. expected: api://orders”.
O que significa
O token foi verificado criptograficamente, mas a claim aud dele não corresponde ao público-alvo que seu verificador exige. A verificação do público-alvo existe para que um token gerado para uma API não possa ser reutilizado contra outra — a assinatura prova quem emitiu o token, enquanto o aud prova para qual serviço ele foi emitido, e as duas verificações precisam passar antes que se possa confiar nas claims.
Por que acontece
Divergência na comparação exata do identificador
comumA comparação do aud é exata, caractere por caractere: https://api.example.com e https://api.example.com/ (barra final), http e https, ou um ID do cliente e um identificador de API — qualquer uma dessas diferenças reprova a verificação. Provedores OAuth muitas vezes colocam o client_id em aud, a menos que você solicite um público-alvo específico.
O token foi emitido para outra API
comumO cliente obteve um token para o serviço A e o enviou para o serviço B. É comum quando um único provedor de identidade atende várias APIs: o parâmetro audience na requisição de token precisa indicar a API à qual o token será apresentado.
O aud é um array e as expectativas divergem
ocasionalO aud pode, legitimamente, ser um array de strings. O jsonwebtoken considera que há correspondência se qualquer elemento for igual a qualquer valor esperado — mas um código que valida o aud manualmente antes, supondo uma string simples, quebra com claims cujo valor é um array.
Como corrigir
- 1.
Comparar o que o token traz com o que você espera
Imprima os dois lados. Corrija o que estiver errado: a opção audience do verificador ou o parâmetro audience/resource que o cliente usa ao solicitar o token.
js const { aud } = jwt.decode(token); console.log("token aud:", aud); // e.g. "api://orders" or ["api://orders"] jwt.verify(token, key, { algorithms: ["ES256"], audience: "api://orders", // must match exactly (string, array or RegExp) }); - 2.
Aceitar explicitamente as variantes legítimas
Se vários identificadores forem realmente válidos para esta API, liste todos — não remova a verificação do público-alvo para fazer o erro desaparecer.
js jwt.verify(token, key, { algorithms: ["ES256"], audience: ["api://orders", "https://api.example.com"], });