tutorial implementar example ejemplo como api authentication rest oauth restful-architecture

api - implementar - oauth2 token



Preguntas sobre el consumo de su propia API con OAuth (2)

Estoy construyendo una API RESTful para un proyecto en el que estoy trabajando y me gustaría que la aplicación principal consuma la API porque:

  1. Conseguirá tener un conjunto de código para mantener
  2. Si decidimos exponer la API para terceros desarrolladores, ya estará hecho
  3. Abre la posibilidad de hacer aplicaciones móviles que lo consuman
  4. Realmente quiero aprender cómo hacerlo

La API se alojará en un subdominio https://api.example.com y la aplicación web principal se alojará en el dominio raíz https://example.com .

Conceptualmente entiendo cómo funciona todo, pero mi pregunta principal es cómo cambiará el flujo de autenticación, si es que lo hace. Por lo general, aplicaciones de terceros:

  1. Obtenga un token de solicitud de https://api.example.com/request_token
  2. Redirigir al usuario para que se autentique en https://api.authenticate.com/authorize
  3. Obtener redirigido a la aplicación de terceros
  4. Obtenga un token de acceso de https://api.example.com/access_token

Como controlo ambos dominios, ¿puedo hacer algo similar a:

  1. Obtenga un token de solicitud cuando el usuario llegue a la pantalla de inicio de sesión en https://www.example.com
  2. El usuario se autentica utilizando un formulario en https://www.example.com que llama al mismo código que https://api.example.com/authorize
  3. Si las credenciales son válidas, el token de solicitud se intercambia por el token de acceso
  4. El token de acceso se guarda en la sesión y caduca cuando el usuario cierra sesión como lo haría normalmente

El paso 3 parece estar mal, ya que habrá un código duplicado, pero no me abriría para los ataques XSS. El formulario de inicio de sesión en https://www.example.com envió los datos a https://api.example.com ya que son dominios técnicamente diferentes?

¿Estoy sobrecomplicando esto?


Diría que lo estás complicando un poco. Si su código está separado adecuadamente, puede construir fácilmente una capa REST delgada sobre la capa de servicio de su aplicación, mientras que los controladores de su aplicación también serán una capa delgada sobre su capa de servicio.


Me he encontrado con el mismo problema y lo he resuelto así.

1 Para aplicaciones de terceros que usan mi API, deben autenticarse a través de OAuth en todas las solicitudes.

2 Para mis propios clientes externos, (móvil, AIR, etc.): usan OAuth, con la diferencia de que les permití enviar el nombre de usuario y la contraseña directamente en el paso de autorización (para poder hacer un diálogo de inicio de sesión nativo). Esto se proporciona siempre que su API tenga SSL / HTTPS.

3 Para mi aplicación web, uso autenticación de cookies para acceder a las API. Es decir, después de haber iniciado sesión, el usuario simplemente puede llamar a API: URL y recuperar JSON / XML. Es bueno también para explorar rápidamente las API (aunque una consola API real como APIGee hace un mejor trabajo allí).