Estoy construyendo una API REST para un proyecto que estoy trabajando y me gustaría hacer la aplicación principal de la API consumen porque:preguntas sobre el consumo de su propia API con OAuth
- que se traducirá en tener un conjunto de código para mantener
- si decidimos exponer la API para desarrolladores de 3 ª parte que ya se hará
- se abre la posibilidad para que las aplicaciones móviles que consumen
- 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. aplicaciones normalmente de 3 ª parte serían:
- obtener un token de solicitud de
https://api.example.com/request_token
- redirigir al usuario a autenticarse en
https://api.authenticate.com/authorize
- redirecciona a la aplicación de 3 ª parte
- obtener un token de acceso de
https://api.example.com/access_token
Como controlo ambos dominios, ¿puedo hacer algo similar a:
- obtener un token de solicitud cuando el usuario accede a la pantalla de inicio de sesión en
https://www.example.com
- El usuario se autentica mediante un formulario en
https://www.example.com
que llama el mismo código quehttps://api.example.com/authorize
- Si las credenciales son válidas, el token de solicitud se intercambia para el token de acceso token de acceso
- se guarda en la sesión y expira cuando el usuario cierra la sesión como lo haría normalmente
Paso 3 se siente como que está mal ya que habrá Duplica te código, pero ¿no me abriría para ataques XSS es el formulario de inicio de sesión en https://www.example.com
envió los datos a https://api.example.com
ya que son técnicamente dominios diferentes?
¿Estoy sobrecomplicando esto?
¿Pueden dar más detalles sobre el ítem 3? Cuando el usuario inicia sesión, ¿está guardando un ID de sesión en una cookie y luego usándolo como un token de pseudo acceso para cuando realiza una llamada API, y luego lo busca cuando recibe la solicitud API? Parece que sería una vulnerabilidad de seguridad ... – Steve
En esencia, sí. Pero, ¿cómo es eso una vulnerabilidad? No uso OAuth cuando llamo a las API desde la aplicación web. Si está conectado (como lo determina la validación de la cookie), se puede acceder a las API simplemente llamando a la URL. Sin embargo, me olvidé de mencionar que sirvo las API en la aplicación web en el mismo dominio. –
Supongo que siempre y cuando no confíe únicamente en la identificación de la sesión para identificar al usuario en el servidor, no lo es. Estaba pensando que podría abrirse a [Session Hijacking] (http://en.wikipedia.org/wiki/Session_hijacking), pero es el viernes después de la escuela y estoy cansado. En función de tus respuestas a otras preguntas, definitivamente eres un hombre muy bien informado. ¡Gracias por tu ayuda! – Steve