Dentro del contexto de una implementación de OAuth2, me gustaría otorgarle a un Cliente un JWT encriptado que tenga un alcance para varios servidores de recursos y que cada servidor de recursos pueda descifrar independientemente del servidor de autorización que comparte un secreto entre todos los servidores de recursos.
¿Existen especificaciones para resolver este escenario?
Los requisitos en la siguiente sección especifican algunas restricciones restantes.
Requisitos
- El descifrado debe ocurrir en la capa del Servidor de recursos, sin tener que volver a enviar el token a un Servidor de autorización (a través del punto final de introspección del token, o de otro modo).
- Los Servidores de recursos deben tener claves secretas distintas para limitar la superficie de ataque que podría resultar en que se comprometa cualquier clave secreta.
- El JWT debe usar el formato compacto para seguir siendo compatible con OpenID Connect (¿es esto cierto, o puede OpenID Connect funcionar con los formatos de serialización JSON JWT (JWS / JWE)?)
Un caso de uso de ejemplo
Trazaré un caso de uso para la concesión de código de autorización ( enlace ) para demostrar mi caso de uso.
- Como usuario registrado de un servidor de autorización
- Cuando visito una aplicación de cliente OAuth2 registrada (con mi agente de usuario) por primera vez
- Luego debería ser redirigido al Servidor de Autorización con los parámetros de consulta requeridos para la concesión del Código de Autorización (incluyendo scopes="photos.read, photos.write, friends.read")
-
Y debería ver un cuadro de diálogo de autorización que solicita acceso delegado a los siguientes servicios:
- Lee tus fotos
- Sube fotos en tu nombre
- Lee a tus amigos
-
Cuando hago clic en 'Autorizar'
- Luego, debería ser redirigido de nuevo a la aplicación de cliente OAuth2 registrada con un código de autorización
- Cuando el sistema de aplicación cliente OAuth2 usó el código de autorización para solicitar un token
-
Luego, el sistema de aplicación cliente OAuth2 debería recibir un token con los siguientes ámbitos:
- photos.read
- photos.write
- friends.read
(...)
En mi implementación de este sistema, el "Recurso de fotos" y el "Recurso de amigos" viven en dos servidores de recursos distintos. Como se mencionó anteriormente, el objetivo es que estos servidores de recursos no compartan claves secretas idénticas.
Posible solución
- JWE JSON Serialización con múltiples destinatarios ( enlace ). Esto infringe los requisitos anteriores, ya que utiliza el método de serialización JWE JSON en lugar del formato compacto JWE. Según la pregunta anterior, parece que OpenID Connect solo puede usar el formato compacto de JWT. Si mi suposición es incorrecta aquí, ¿tal vez esta sea una solución razonable?
Gracias por leer esto. Realmente agradecería cualquier sugerencia o sugerencia.