¿Se necesita CORS en algún aspecto de la autenticación OAuth / OpenIDConnect?

5

Estoy observando la autenticación OpenIDConnect y tratando de determinar si "CORS simple" o "CORS complejo" alguna vez se aprovecha durante la autenticación o autorización.

Background

Un CORS simple (sin verificación previa) implica:

Método HTTP de:

  • GET
  • POST
  • CABEZA

Y un tipo de contenido de

  • multipart / form-data
  • application / x-www-form-urlencoded
  • texto / plano

Resultará en un servidor proporcionado Access-Control-Allow-Origin en la respuesta

Cualquier otro encabezado X o método dará como resultado una solicitud preflight OPTIONS.

Pregunta

  • ¿Alguna forma de OAuth aprovecha CORS de una manera que utiliza solicitudes previas al vuelo? (Se prefiere información sobre OpenID Connect, pero cualquier implementación de OAuth es interesante)

  • ¿Alguna forma de OAuth aprovecha CORS que no tiene la solicitud previa al vuelo?

  • ¿Qué configuración de CORS causaría una vulnerabilidad de seguridad para un proveedor de identidad de OAuth, o parte / recurso de confianza?

pregunta random65537 28.12.2016 - 03:08
fuente

1 respuesta

4

No estoy seguro acerca de OpenID, pero para OAuth no hay CORS involucrado para la parte de autenticación real, aunque puede ser necesario en el servidor de recursos dependiendo del tipo de cliente que se está conectando.

En RFC 6749 , que define el marco OAuth 2, existen cuatro métodos diferentes definidos para que la aplicación obtenga la autorización. (aquí, cliente significa el servidor que desea acceder a los datos, propietario del recurso y usuario final significa la persona de quién son los datos, quién otorga acceso a ellos y host significa la entidad que proporciona la autorización y los puntos finales de la API):

  • Código de autorización, que se usa cuando el cliente está ejecutando un servidor. Este es el método más común.
  • Implícito, que se usa cuando la aplicación se ejecuta dentro del navegador del usuario.
  • Credenciales de contraseña del propietario del recurso, que es donde se utilizan el nombre de usuario y la contraseña del usuario final para autenticar directamente con el servidor. No hay un flujo de autenticación para esto, el usuario solo tiene que dar su contraseña a la aplicación.
  • Credenciales del cliente, que es donde el cliente tiene acceso automático a los recursos. No hay un flujo de autenticación para esto porque es automático.

Cuando se usa el método código de autorización , una descripción general de alto nivel para el flujo de autenticación es que el cliente redirige al usuario a una página de autorización en el host. Cuando el usuario final otorga el acceso, se le redirige al sitio del cliente. Al recibir la solicitud, el servidor del cliente realizará una solicitud al host para intercambiar el token temporal por un token permanente, que luego utilizarán para realizar una solicitud de API desde su servidor.

Con este método, todas las solicitudes se realizan desde el servidor del cliente al servidor host, por lo que no hay necesidad de CORS. Las únicas solicitudes realizadas en el navegador del usuario final son las redirecciones, que no se ven afectadas por CORS.

Cuando se utiliza el método implícito , cuando se redirige al usuario final después de conceder el acceso, el código permanente se recupera de la URL mediante un script (javascript) que se ejecuta en el navegador del usuario final en el sitio web del cliente. . Este código es utilizado por los scripts de javascript que se ejecutan en su navegador para acceder a la API.

CORS debe usarse para los puntos finales de la API real con este método (si las solicitudes necesitarían CORS de todos modos, no hay nada especial en que se autentique mediante OAuth, por lo que las solicitudes GET no necesitan CORS, pero sí las solicitudes DELETE), porque se está accediendo desde el navegador del usuario. Sin embargo, el flujo de autenticación no necesita CORS porque, de nuevo, se maneja utilizando redirecciones en lugar de solicitudes de origen cruzado.

    
respondido por el JackW 28.12.2016 - 14:50
fuente

Lea otras preguntas en las etiquetas