La aud
revendication JWT (Audience)
Selon RFC 7519 :
La revendication "aud" (audience) identifie les destinataires auxquels le JWT est destiné. Chaque mandant destiné à traiter le JWT DOIT s'identifier avec une valeur dans la revendication d'audience. Si le principal traitant la réclamation ne s'identifie pas avec une valeur dans la réclamation "aud" lorsque cette réclamation est présente, alors le JWT DOIT être rejeté. Dans le cas général, la valeur "aud" est un tableau de chaînes sensibles à la casse, chacune contenant une valeur StringOrURI. Dans le cas particulier où le JWT a un public, la valeur "aud" PEUT être une seule chaîne sensible à la casse contenant une valeur StringOrURI. L'interprétation des valeurs d'audience est généralement spécifique à l'application.
L'utilisation de cette allégation est FACULTATIVE.
La aud
revendication Audience ( ) telle que définie par la spécification est générique et spécifique à l'application. L'utilisation prévue est d'identifier les destinataires prévus du jeton. Ce que signifie un destinataire est spécifique à l'application. Une valeur d'audience est soit une liste de chaînes, soit une seule chaîne s'il n'y a qu'une seule aud
revendication. Le créateur du jeton n'applique pas ce qui aud
est validé correctement, il incombe au destinataire de déterminer si le jeton doit être utilisé.
Quelle que soit la valeur, lorsqu'un destinataire valide le JWT et qu'il souhaite valider que le jeton était destiné à être utilisé à ses fins, il DOIT déterminer quelle valeur aud
s'identifie, et le jeton ne doit valider que si l'ID déclaré du destinataire est présent dans la aud
réclamation. Peu importe s'il s'agit d'une URL ou d'une autre chaîne spécifique à une application. Par exemple, si mon système décide de s'identifier aud
avec la chaîne: api3.app.com
il ne doit accepter le JWT que si la aud
revendication contient api3.app.com
dans sa liste des valeurs d'audience.
Bien sûr, les destinataires peuvent choisir de ne pas tenir compte aud
, donc cela n'est utile que si un destinataire souhaite une validation positive que le jeton a été créé spécifiquement pour lui.
Mon interprétation basée sur la spécification est que la aud
revendication est utile pour créer des JWT spécialement conçus qui ne sont valables qu'à certaines fins. Pour un système, cela peut signifier que vous souhaitez qu'un jeton soit valide pour certaines fonctionnalités, mais non valide pour d'autres. Vous pouvez émettre des jetons qui sont limités à un certain "public", tout en utilisant les mêmes clés et algorithme de validation.
Étant donné que dans le cas typique, un JWT est généré par un service de confiance et utilisé par d'autres systèmes de confiance (systèmes qui ne veulent pas utiliser de jetons non valides), ces systèmes doivent simplement coordonner les valeurs qu'ils utiliseront.
Bien sûr, aud
c'est complètement facultatif et peut être ignoré si votre cas d'utilisation ne le justifie pas. Si vous ne souhaitez pas restreindre l'utilisation des jetons par des publics spécifiques, ou qu'aucun de vos systèmes ne validera réellement le aud
jeton, alors il est inutile.
Exemple: jetons d'accès et de rafraîchissement
Un exemple artificiel (mais simple) auquel je peux penser est peut-être que nous voulons utiliser des JWT pour les jetons d'accès et d'actualisation sans avoir à implémenter des clés de chiffrement et des algorithmes séparés, mais que nous voulons simplement nous assurer que les jetons d'accès ne seront pas validés en tant que jetons d'actualisation, ou vice-versa. -versa.
En utilisant, aud
nous pouvons spécifier une revendication de refresh
pour les jetons d'actualisation et une réclamation de access
pour les jetons d'accès lors de la création de ces jetons. Lorsqu'une demande est faite pour obtenir un nouveau jeton d'accès à partir d'un jeton d'actualisation, nous devons valider que le jeton d'actualisation était un véritable jeton d'actualisation. La aud
validation décrite ci-dessus nous dira si le jeton était réellement un jeton d'actualisation valide en recherchant spécifiquement une revendication de refresh
in aud
.
ID client OAuth et aud
revendication JWT
L'ID client OAuth est totalement indépendant et n'a aucune corrélation directe avec les aud
revendications JWT . Du point de vue d'OAuth, les jetons sont des objets opaques.
L'application qui accepte ces jetons est responsable de l'analyse et de la validation de la signification de ces jetons. Je ne vois pas beaucoup d'intérêt à spécifier l'ID client OAuth dans une aud
revendication JWT .
aud REQUIRED for session_token. Contains the client_id of the client receiving the assertion.