Estoy trabajando en la implementación de OAuth 2.0 JWT access_token en mi servidor de autenticación. Pero no tengo claro cuáles son las diferencias entre el aud
reclamo de JWT y el client_id
valor del encabezado HTTP. ¿Son lo mismo? Si no es así, ¿puede explicar la diferencia entre los dos?
Mi sospecha es que aud
debería hacer referencia a los servidores de recursos, y client_id
debería hacer referencia a una de las aplicaciones cliente reconocidas por el servidor de autenticación (es decir, aplicación web o aplicación iOS).
En mi caso actual, mi servidor de recursos también es mi cliente de aplicación web.
aud REQUIRED for session_token. Contains the client_id of the client receiving the assertion.
El
aud
reclamo de JWT (audiencia)Según RFC 7519 :
La
aud
afirmación Audience ( ) tal como se define en la especificación es genérica y específica de la aplicación. El uso previsto es identificar los destinatarios previstos del token. Lo que significa un destinatario es específico de la aplicación. Un valor de audiencia es una lista de cadenas o puede ser una sola cadena si solo hay unaud
reclamo. El creador del token no hace cumplir queaud
esté validado correctamente, la responsabilidad es del destinatario de determinar si se debe utilizar el token.Cualquiera que sea el valor, cuando un destinatario está validando el JWT y desea validar que el token estaba destinado a ser utilizado para sus fines, DEBE determinar qué valor se
aud
identifica a sí mismo, y el token solo debe validar si la identificación declarada del destinatario es presente en laaud
reclamación. No importa si se trata de una URL o de alguna otra cadena específica de la aplicación. Por ejemplo, si mi sistema decide identificarseaud
con la cadena:api3.app.com
entonces solo debería aceptar el JWT si elaud
reclamo contieneapi3.app.com
en su lista de valores de audiencia.Por supuesto, los destinatarios pueden optar por ignorar
aud
, por lo que esto solo es útil si un destinatario desea una validación positiva de que el token se creó específicamente para él.Mi interpretación basada en la especificación es que la
aud
afirmación es útil para crear JWT especialmente diseñados que solo son válidos para ciertos propósitos. Para un sistema, esto puede significar que desea que un token sea válido para algunas funciones, pero no válido para otras. Podrías emitir tokens que estén restringidos solo a una determinada "audiencia", mientras sigues usando las mismas claves y algoritmo de validación.Dado que en el caso típico un JWT es generado por un servicio confiable y utilizado por otros sistemas confiables (sistemas que no quieren usar tokens inválidos), estos sistemas simplemente necesitan coordinar los valores que usarán.
Por supuesto,
aud
es completamente opcional y puede ignorarse si su caso de uso no lo justifica. Si no desea restringir los tokens para que sean utilizados por audiencias específicas, o ninguno de sus sistemas realmente validará elaud
token, entonces es inútil.Ejemplo: tokens de acceso y actualización
Un ejemplo artificial (aunque simple) en el que puedo pensar es que tal vez queremos usar JWT para acceder y actualizar tokens sin tener que implementar claves de cifrado y algoritmos separados, pero simplemente queremos asegurarnos de que los tokens de acceso no se validen como tokens de actualización, o viceversa. -versa.
Al usar
aud
, podemos especificar un reclamo derefresh
tokens de actualización y un reclamo deaccess
tokens de acceso al crear estos tokens. Cuando se realiza una solicitud para obtener un nuevo token de acceso de un token de actualización, debemos validar que el token de actualización era un token de actualización genuino. Laaud
validación descrita anteriormente nos dirá si el token era en realidad un token de actualización válido al buscar específicamente un reclamo derefresh
inaud
.ID de cliente de OAuth frente a
aud
reclamación de JWTEl ID de cliente de OAuth no está relacionado en absoluto y no tiene una correlación directa con los
aud
reclamos de JWT . Desde la perspectiva de OAuth, los tokens son objetos opacos.La aplicación que acepta estos tokens es responsable de analizar y validar el significado de estos tokens. No veo mucho valor en especificar el ID de cliente de OAuth dentro de un
aud
reclamo de JWT .fuente
Si vino aquí buscando OpenID Connect (OIDC): OAuth 2.0! = OIDC
Reconozco que esto está etiquetado para oauth 2.0 y NO OIDC, sin embargo, con frecuencia hay una combinación entre los 2 estándares, ya que ambos estándares pueden usar JWT y el
aud
reclamo. Y uno (OIDC) es básicamente una extensión del otro (OAUTH 2.0). (Me encontré con esta pregunta buscando OIDC yo mismo).Tokens de acceso de OAuth 2.0 ##
Para los tokens de acceso de OAuth 2.0 , las respuestas existentes lo cubren bastante bien. Además, aquí hay una sección relevante de OAuth 2.0 Framework (RFC 6749)
Tokens de ID de OIDC ##
OIDC tiene tokens de identificación además de tokens de acceso. La especificación OIDC es explícita sobre el uso del
aud
reclamo en los tokens de identificación. ( openid-connect-core-1.0 )además, OIDC especifica la
azp
afirmación que se utiliza junto conaud
whenaud
tiene más de un valor.fuente
Aunque esto es antiguo, creo que la pregunta es válida incluso hoy
Sí, aud debe referirse a la parte consumidora de tokens. Y client_id se refiere a la fiesta de obtención de tokens.
En el escenario del OP, la aplicación web y el servidor de recursos pertenecen a la misma parte. Entonces esto significa que el cliente y la audiencia deben ser iguales. Pero puede haber situaciones en las que este no sea el caso.
Piense en un SPA que consume un recurso protegido por OAuth. En este escenario, SPA es el cliente. El recurso protegido es la audiencia del token de acceso.
Este segundo escenario es interesante. Existe un borrador de trabajo llamado " Indicadores de recursos para OAuth 2.0 " que explica dónde puede definir la audiencia prevista en su solicitud de autorización. Entonces, el token resultante se restringirá a la audiencia especificada. Además, Azure OIDC usa un enfoque similar en el que permite el registro de recursos y permite que la solicitud de autenticación contenga un parámetro de recurso para definir la audiencia prevista del token de acceso. Dichos mecanismos permiten que las asignaciones de OAuth tengan una separación entre el cliente y la parte consumidora de tokens (audiencia).
fuente