En la pregunta, sustituya
scope
constate
. 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?