A aud
reivindicação JWT (público)
De acordo com RFC 7519 :
A declaração "aud" (público) identifica os destinatários aos quais o JWT se destina. Cada diretor que pretende processar o JWT DEVE se identificar com um valor na reivindicação do público. Se o responsável pelo processamento da reclamação não se identificar com um valor na reclamação "aud" quando esta reclamação estiver presente, o JWT DEVE ser rejeitado. No caso geral, o valor "aud" é uma matriz de strings com distinção entre maiúsculas e minúsculas, cada uma contendo um valor StringOrURI. No caso especial em que o JWT tem um público, o valor "aud" PODE ser uma única string com distinção entre maiúsculas e minúsculas contendo um valor StringOrURI. A interpretação dos valores do público geralmente é específica da aplicação.
O uso desta reivindicação é OPCIONAL.
A aud
declaração Audience ( ) conforme definida pela especificação é genérica e específica do aplicativo. O uso pretendido é identificar os destinatários pretendidos do token. O que um destinatário significa é específico do aplicativo. Um valor de público é uma lista de strings ou pode ser uma única string se houver apenas uma aud
declaração. O criador do token não impõe que aud
seja validado corretamente, a responsabilidade é do destinatário para determinar se o token deve ser usado.
Qualquer que seja o valor, quando um destinatário está validando o JWT e deseja validar que o token foi destinado a ser usado para seus fins, ele DEVE determinar qual valor em se aud
identifica, e o token só deve validar se o ID declarado do destinatário for presente na aud
reivindicação. Não importa se este é um URL ou alguma outra string específica do aplicativo. Por exemplo, se meu sistema decidir se identificar aud
com a string: api3.app.com
então, ele só deve aceitar o JWT se a aud
declaração contiver api3.app.com
em sua lista de valores de público.
É claro que os destinatários podem escolher ignorar aud
, portanto, isso só é útil se um destinatário quiser uma validação positiva de que o token foi criado especificamente para ele.
Minha interpretação com base na especificação é que a aud
afirmação é útil para criar JWTs construídos com um propósito que são válidos apenas para determinados fins. Para um sistema, isso pode significar que você deseja que um token seja válido para alguns recursos, mas não para outros. Você pode emitir tokens restritos a apenas um determinado "público", enquanto ainda usa as mesmas chaves e algoritmo de validação.
Como, no caso típico, um JWT é gerado por um serviço confiável e usado por outros sistemas confiáveis (sistemas que não desejam usar tokens inválidos), esses sistemas simplesmente precisam coordenar os valores que usarão.
Claro, aud
é totalmente opcional e pode ser ignorado se seu caso de uso não justificar. Se você não quiser restringir o uso de tokens por públicos específicos, ou nenhum de seus sistemas realmente validará o aud
token, então ele é inútil.
Exemplo: tokens de acesso vs. atualização
Um exemplo inventado (mas simples) em que posso pensar é talvez queiramos usar JWTs para acessar e atualizar tokens sem ter que implementar chaves de criptografia e algoritmos separados, mas simplesmente querer garantir que os tokens de acesso não sejam validados como tokens de atualização ou vice-versa -versa.
Ao usar aud
, podemos especificar uma reivindicação de refresh
tokens de atualização e uma reivindicação de access
tokens de acesso ao criar esses tokens. Quando uma solicitação é feita para obter um novo token de acesso de um token de atualização, precisamos validar se o token de atualização era um token de atualização genuíno. A aud
validação conforme descrito acima nos dirá se o token era realmente um token de atualização válido, procurando especificamente por uma declaração de refresh
em aud
.
ID do cliente OAuth x aud
reivindicação JWT
O ID do cliente OAuth não está relacionado e não tem correlação direta com as aud
declarações do JWT . Da perspectiva do OAuth, os tokens são objetos opacos.
O aplicativo que aceita esses tokens é responsável por analisar e validar o significado desses tokens. Não vejo muito valor em especificar o ID do cliente OAuth em uma aud
declaração JWT .
aud REQUIRED for session_token. Contains the client_id of the client receiving the assertion.