No sé si solo tengo algún tipo de punto ciego o qué, pero he leído las especificaciones de OAuth 2 muchas veces y he leído los archivos de la lista de correo, y todavía no he encontrado una buena explicación de por qué la Subvención implícita Se ha desarrollado un flujo para obtener tokens de acceso. En comparación con la concesión del código de autorización, parece simplemente renunciar a la autenticación del cliente sin una razón muy convincente. ¿Cómo se "optimiza para clientes implementados en un navegador usando un lenguaje de script" (para citar la especificación)?
Ambos flujos comienzan igual (fuente: http://tools.ietf.org/html/draft-ietf-oauth-v2-22 ):
- El cliente inicia el flujo dirigiendo el agente de usuario del propietario del recurso al punto final de autorización.
- El servidor de autorización autentica al propietario del recurso (a través del agente de usuario) y establece si el propietario del recurso otorga o rechaza la solicitud de acceso del cliente.
- Asumiendo que el propietario del recurso concede acceso, el servidor de autorización redirige al agente de usuario nuevamente al cliente utilizando el URI de redireccionamiento proporcionado anteriormente (en la solicitud o durante el registro del cliente).
- El URI de redireccionamiento incluye un código de autorización (flujo de código de autorización)
- El URI de redireccionamiento incluye el token de acceso en el fragmento de URI (flujo implícito)
Aquí es donde se dividen los flujos. En ambos casos, el URI de redireccionamiento en este punto es a algún punto final alojado por el cliente:
- En el flujo del código de autorización, cuando el agente de usuario alcanza ese punto final con el código de autorización en el URI, el código en ese punto final intercambia el código de autorización junto con sus credenciales de cliente por un token de acceso que luego puede usar según sea necesario. Podría, por ejemplo, escribirlo en una página web a la que pueda acceder un script en la página.
- El flujo implícito omite este paso de autenticación del cliente por completo y solo carga una página web con el script del cliente. Aquí hay un lindo truco con el fragmento de URL que evita que el token de acceso se pase demasiado, pero el resultado final es esencialmente el mismo: el sitio alojado por el cliente sirve una página con algún script que puede tomar el token de acceso .
De ahí mi pregunta: ¿qué se ha ganado aquí omitiendo el paso de autenticación del cliente?