¿Cuál es el beneficio del alcance en OAuth2?

17
  

En la pregunta, sustituya scope con state . Ya que hay una respuesta basada en la pregunta incorrecta, dejaré que todo sea como está. No obstante, la respuesta es útil.

Esta pregunta hace referencia al borrador actual v30 de OAuth2 y GitHub's y su implementación.

El "flujo de aplicaciones web" de GitHub es más o menos una implementación de Código de autorización Otorgue como se describe en la especificación. El cliente (la aplicación web) dirige al usuario a una página especial en GitHub que pregunta si el usuario desea permitir que la aplicación acceda a sus recursos. Si se confirma esto, se redirige al usuario al cliente, que luego utiliza un código temporal para recuperar el token de OAuth para su uso futuro.

Si el cliente proporcionó un parámetro scope para la solicitud del usuario a GitHub, la redirección también contiene ese parámetro. Si el alcance es un secreto que solo el cliente conoce, el cliente puede estar seguro de que nadie más creó esa solicitud, es decir, que el usuario no ha sido víctima de un ataque CSRF.

¿Pero es realmente necesario?

Si elegimos no para usar un parámetro scope y el usuario es realmente víctima de un ataque CSRF, todavía debe aceptar la pregunta formulada por GitHub si el cliente tiene permiso para acceder a la información del usuario. Este paso no se puede omitir. De hecho, la especificación dice

  

[El] servidor de autorización autentica al propietario del recurso y obtiene una decisión de autorización (preguntando al propietario del recurso o estableciendo la aprobación por otros medios).

Si el atacante usa otras técnicas como el clickjacking para engañar al usuario para que acepte la solicitud, creo que todas las apuestas están desactivadas de todos modos y el alcance tampoco protegerá al usuario.

En conclusión: ¿Contra qué amenaza protege realmente el alcance el usuario?

    
pregunta musiKk 22.07.2012 - 21:58
fuente

2 respuestas

23

Parámetro del estado

El parámetro de alcance no se usa para asegurar la solicitud de autenticación contra ataques CSRF (ver más abajo). Pero hay otro parámetro llamado "estado", que coincide con su descripción.

[Preguntando al usuario]

  

Este paso no se puede omitir.

Tengo miedo, esta suposición no es correcta. Es muy común que al usuario solo se le pida permiso cuando utiliza una aplicación cliente por primera vez. Después de eso, el servidor recuerda la aplicación cliente y otorga acceso automáticamente.

  

De hecho, la especificación dice

     
    

[El] servidor de autorización autentica al propietario del recurso y obtiene una decisión de autorización (preguntando al propietario del recurso o estableciendo la aprobación por otros medios).

  

Otros medios pueden incluir que el servidor confíe en la aplicación (por ejemplo, que pertenezca a la misma compañía) o que se haya guardado la decisión del usuario.

Por lo tanto, sin un parámetro de estado, el atacante puede engañar a un usuario para que inicie sesión en una aplicación, que el usuario conoce en principio o que el servidor confía en general.

Parámetro de alcance

El parámetro de alcance se usa para indicar una lista de permisos , que son solicitados por el cliente:

  

Los puntos finales de autorización y token permiten al cliente especificar el alcance de la solicitud de acceso utilizando el parámetro de solicitud de "alcance".

Por ejemplo, los permisos para una red social pueden incluir:

post_to_my_wall  send_notification  post_to_my_friends_wall  read_my_age
  

El valor del parámetro de alcance se expresa como una lista de espacios   Delimitado, cadenas sensibles a mayúsculas y minúsculas. Las cuerdas están definidas por el   servidor de autorizacion.

El servidor puede proporcionar todos los permisos solicitados o una lista modificada (por ejemplo, porque el usuario negó algunos permisos):

  

Si el alcance del token de acceso emitido es diferente del solicitado por el cliente, el servidor de autorización DEBE incluir el parámetro de respuesta del "alcance" para informar al cliente del alcance real otorgado.

Fuente: enlace

    
respondido por el Hendrik Brummermann 03.08.2012 - 07:20
fuente
3

(la respuesta se basa en el supuesto de que OP pretendía hablar del "estado" en lugar del "alcance")

No creo que el parámetro "estado" deba ser una característica de seguridad. Es solo un parámetro que el consumidor puede usar para colocar algunos datos que desea recuperar después de que se complete el flujo de autorización.

Esto es útil en el caso de que el consumidor no pueda mantener un estado por sí solo (cliente sin estado, no basado en sesión, etc.). Dado que el flujo de autorización implica redireccionar el navegador del usuario al proveedor, el cliente puede, por ejemplo, perder de vista en qué página estaba el usuario cuando activó el flujo de autenticación (o lo que el usuario estaba tratando de hacer).

Al pasar esa información en el parámetro de estado, el cliente la recuperará después del flujo de autorización y puede redirigir al usuario a la ubicación apropiada, por ejemplo.

    
respondido por el Christophe L 15.03.2014 - 02:00
fuente

Lea otras preguntas en las etiquetas