¿Cómo deben los proveedores de recursos validar los tokens OAuth2?

9

Los proveedores de recursos a menudo proporcionan acceso de lectura y escritura a los recursos.

Por lo tanto, un proveedor de recursos no solo debe validar el token (¿está vencido? ¿está revocado? ¿es válido? ¿contiene el alcance requerido?), también deben verificar los privilegios del token (¿usa XY tiene suficientes privilegios para recurso de lectura o escritura ZY?).

Hasta ahora he usado el siguiente flujo de trabajo:

  1. El cliente recibe un token de acceso a través de la concesión del código OAuth2.
  2. El cliente realiza una solicitud en nombre del usuario para, por ejemplo, %código%
  3. El Servicio de recursos (llamémoslo Publicaciones de usuarios ) valida el token realizando una solicitud al Servidor de autorización, confirmando que el token es válido. El Servidor de Autorización también pasa metadatos como la fecha de caducidad del token, la audiencia del token, los ámbitos del token y el tema del token (por ejemplo, Usuario XY)
  4. El Servicio de recursos ahora valida que el sujeto (por ejemplo, el Usuario XY) está autorizado / autorizado para realizar la solicitud. Por ejemplo, marcando una lista de control de acceso o similar. Por ejemplo: Digamos que el usuario XY quiere actualizar la publicación de un usuario por parte del usuario AB. Esto, por ejemplo, sería rechazado por la Lista de control de acceso.
  5. Si la validación pasa, el servidor de recursos ejecuta la solicitud.

¿Es esta una forma válida de hacer cosas o estoy abriendo vectores de ataque? ¿Es correcto que el servidor de recursos suponga que el sujeto del token es el que debe considerarse la solicitud de autorización? ¿Hay quizás mejores prácticas o estándares para resolver esto?

Actualmente estoy confundido, porque leo que OAuth2 es solo delegación, no autorización ni autenticación y que clientes no debe hacer suposiciones implícitas como "el token XY pertenece al usuario AB, por lo que el usuario AB está autenticado" .

Cualquier ayuda es apreciada con mucho gusto.

    
pregunta machete 29.12.2015 - 14:07
fuente

1 respuesta

5

RFC 6750 , El marco de autorización de OAuth 2.0: uso de token de portador , Sección 5: Consideraciones de seguridad trata algunos de los problemas relacionados con el uso de tokens de portador. De la sección 5.2:

  

5.2. Mitigación de amenazas

     

Se puede mitigar una gran variedad de amenazas protegiendo los contenidos   del token utilizando una firma digital o una autenticación de mensaje   Código (MAC). Alternativamente, un token de portador puede contener una referencia a   Información de autorización, en lugar de codificar la información.   directamente. Tales referencias DEBEN ser inviables para que un atacante   adivinar; el uso de una referencia puede requerir una interacción extra entre un   servidor y el emisor del token para resolver la referencia a la   información de autorización. La mecánica de tal interacción es   no definido por esta especificación.

En el paso 3 de su flujo de trabajo, describe el servicio de recursos que solicita al servicio de autorización si el token es válido. Este es un ejemplo del uso de una referencia para resolver información de autorización. Sin embargo, el paso 4 tiene al servidor de recursos validando el asunto (por ejemplo, UserXY). Este es un ejemplo de codificación de la autorización en el token. Este enfoque híbrido no es un problema, pero puede simplificar su diseño seleccionando uno u otro.

Además, en lugar de usar un sujeto de token UserXY para impartir todas las autorizaciones de un usuario a un solo token, puede ser mejor usar el El principio de privilegio mínimo aquí y hace que el servidor de autorización coloque autorizaciones específicas (p. ej., lea el correo electrónico de UserXY, componga los mensajes de UserXY) en lugar de dar acceso a cualquier cosa que UserXY pueda hacer.

    
respondido por el Doug Richardson 30.12.2015 - 06:45
fuente

Lea otras preguntas en las etiquetas