Je travaille sur l'implémentation d'OAuth 2.0 JWT access_token dans mon serveur d'authentification. Mais, je ne suis pas clair sur les différences entre la aud
revendication JWT et la client_id
valeur d'en-tête HTTP. Sont-ils les mêmes? Sinon, pouvez-vous expliquer la différence entre les deux?
Je soupçonne que cela aud
devrait faire référence au (x) serveur (s) de ressources, et que client_id
devrait faire référence à l'une des applications clientes reconnues par le serveur d'authentification (c'est-à-dire l'application Web ou l'application iOS).
Dans mon cas actuel, mon serveur de ressources est également mon client d'application Web.
aud REQUIRED for session_token. Contains the client_id of the client receiving the assertion.
La
aud
revendication JWT (Audience)Selon RFC 7519 :
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 seuleaud
revendication. Le créateur du jeton n'applique pas ce quiaud
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 laaud
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'identifieraud
avec la chaîne:api3.app.com
il ne doit accepter le JWT que si laaud
revendication contientapi3.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 leaud
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 derefresh
pour les jetons d'actualisation et une réclamation deaccess
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. Laaud
validation décrite ci-dessus nous dira si le jeton était réellement un jeton d'actualisation valide en recherchant spécifiquement une revendication derefresh
inaud
.ID client OAuth et
aud
revendication JWTL'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 .la source
Si vous êtes venu ici chercher OpenID Connect (OIDC): OAuth 2.0! = OIDC
Je reconnais que cela est étiqueté pour oauth 2.0 et PAS OIDC, cependant il y a fréquemment une confusion entre les 2 normes puisque les deux normes peuvent utiliser les JWT et la
aud
revendication. Et l'un (OIDC) est fondamentalement une extension de l'autre (OAUTH 2.0). (Je suis tombé sur cette question à la recherche d'OIDC moi-même.)Jetons d'accès OAuth 2.0 ##
Pour les jetons d'accès OAuth 2.0 , les réponses existantes le couvrent assez bien. De plus, voici une section pertinente de OAuth 2.0 Framework (RFC 6749)
Jetons d'identification OIDC ##
OIDC a des jetons d'identification en plus des jetons d'accès. La spécification OIDC est explicite sur l'utilisation de la
aud
revendication dans les jetons d'identification. ( openid-connect-core-1.0 )en outre, OIDC spécifie la
azp
revendication qui est utilisée en conjonction avecaud
quandaud
a plus d'une valeur.la source
Bien que ce soit vieux, je pense que la question est valable même aujourd'hui
Oui, aud doit faire référence à la partie consommatrice de jetons. Et client_id fait référence à la partie obtenant le jeton.
Dans le scénario du PO, l'application Web et le serveur de ressources appartiennent tous deux à la même partie. Cela signifie donc que le client et le public doivent être identiques. Mais il peut y avoir des situations où ce n'est pas le cas.
Pensez à un SPA qui consomme une ressource protégée OAuth. Dans ce scénario, SPA est le client. La ressource protégée est l'audience du jeton d'accès.
Ce deuxième scénario est intéressant. Il existe un projet de travail en place intitulé « Indicateurs de ressources pour OAuth 2.0 » qui explique où vous pouvez définir le public visé dans votre demande d'autorisation. Ainsi, le jeton résultant sera limité au public spécifié. En outre, Azure OIDC utilise une approche similaire dans laquelle il autorise l'inscription des ressources et autorise la demande d'authentification à contenir le paramètre de ressource pour définir le public cible du jeton d'accès. De tels mécanismes permettent aux adpotations OAuth d'avoir une séparation entre le client et la partie (audience) consommatrice de jetons.
la source