2012-07-24 24 views
5

Estoy tratando de encontrar la manera de poner en práctica el siguiente flujo de autenticación:API REST en Google App Engine

  1. El usuario accede a una aplicación web (más probabilidades de ser escrito usando Ruby on Rails) y autentica (por ejemplo, nombre de usuario/contraseña).
  2. El cliente consume datos a través de AJAX provisto por una API RESTful basada en Google App Engine (Python, webapp2).

enter image description here

Requisitos:

  1. sólo los usuarios autenticados en la aplicación web (rieles) deben ser capaces de acceder a la API alojada en App Engine.
  2. Los usuarios pueden tener diferentes roles en la aplicación web (Rails), y la API (App Engine) necesita saber qué funciones están asociadas al usuario dado para restringir el acceso a ciertos datos.
  3. El cliente debe poder llamar a la API (App Engine) directamente a través de AJAX, sin enrutar todas las solicitudes a través de la aplicación web (Rails).

Estoy buscando sugerencias sobre cómo implementar dicho flujo de trabajo. ¿Debo usar OAuth (u OAuth2) para acceder a la API? Si el proveedor de OAuth vive en App Engine y en la aplicación web (Rails) solicite a la API un token en nombre del usuario. De ser así, ¿cuál es la mejor manera de permitir que solo la aplicación web (Rails) solicite tokens de OAuth? ¿O debería considerar una estrategia completamente diferente?

Cualquier sugerencia es muy apreciada. También estoy buscando sugerencias de bibliotecas para implementar OAuth en el contexto anterior.

Respuesta

1

Le sugiero que tenga cuidado si está considerando implementar una API basada en Google App Engine utilizando OAuth para su capa de seguridad. Actualmente estoy involucrado en un proyecto que está luchando para resolver exactamente este problema. La capa OAuth sobre GAE aún es nueva y Google la considera "experimental". La documentación de Google es mínima en este momento. Lo que hay comienza here. Te deseo lo mejor si intentas continuar, y haré todo lo posible para ofrecerte ayuda si lo haces.

0

Mi solución a este mismo problema era escribir mi propia autenticación de tres vías (como OAuth):

  1. Después de que el usuario se autentica en el servidor de RoR, responde con un comprobante temporal. Este token se almacena en el servidor RoR, tiene una validez de 60 segundos y contiene los roles del usuario.
  2. El navegador envía este token (usando AJAX) al servidor de webapp2. Es como iniciar sesión en ese servidor usando solo el token.
  3. El servidor webapp2 reenvía el token al servidor RoR para asegurarse de que sea válido.
  4. El servidor RoR se asegura de que el token no haya caducado y elimina inmediatamente el token para evitar solicitudes duplicadas. Si el token es válido, el servidor RoR responde con las funciones del usuario.
  5. Si la respuesta del servidor RoR es buena, el servidor webapp2 responde a la llamada AJAX del navegador (en el paso 2) con una cookie que indica que este usuario ya inició sesión. La sesión debe contener los roles del usuario.
  6. Las solicitudes posteriores al servidor de webapp2 incluirán la cookie para que el servidor pueda responder de acuerdo con las funciones del usuario.