Pregunta

Soy la construcción de aplicaciones web basadas en los pilones con la API REST, que actualmente carece de ningún tipo de autenticación. Así que voy a poner en práctica y que a fin de evitar todos los problemas y la precaución con el almacenamiento de contraseñas de usuario, me gustaría utilizar para la autenticación OpenID. Cuál sería la mejor forma de hacer esto? Son estas dos cosas son compatibles? ¿Hay APIs REST existentes que utilizan OpenID que puedo tomar inspiración?

¿Fue útil?

Solución

Ahora he pasado algún tiempo investigando las opciones y me gustaría resumir los resultados. En primer lugar, un poco más de contexto - I desarrollar y controlar tanto el servicio y el consumidor API. Consumidor es la aplicación basada en Flash que se sirve desde el mismo host de la API es ahora y se supone que debe ser utilizado en el navegador. No hay terceros clientes partido a la vista todavía.

Así que la pregunta se puede dividir en dos partes,

  • ¿cómo lo hago la autenticación OpenID través de la API
  • ¿Cómo se mantiene el estado "autenticado" en las solicitudes posteriores

Para la primera parte, la autenticación OpenID casi siempre incluye pasos interactivos. Durante el proceso de autenticación que lo más probable es que sea un paso en el que el usuario se encuentra en la página web del proveedor de OpenID, la firma y pulsar alguna tecla "Estoy de acuerdo". Así API no puede y no debe manejar esto de forma transparente (sin "dígame su proveedor de OpenID y contraseña y voy a hacer el resto"). Lo mejor que puede hacer es pasar adelante y enlaces HTTP de espalda que el cliente tiene que abrir y seguir las instrucciones.

El mantenimiento del estado "autenticado"

APIs REST debe ser sin estado, cada solicitud debe incluir toda la información necesaria para manejar la situación, ¿verdad? No tendría ningún sentido para autenticar contra el proveedor de OpenID para cada solicitud, por lo que algunos tipo de sesión es necesario. Algunas de las opciones para comunicar clave de sesión (o "token de acceso" o nombre de usuario / contraseña) son:

  • + HTTPS Autenticación básica (la "Autorización: Básico ..." encabezado en cada solicitud)
  • amazónica de estilo ( "Autorización: AWS ..." encabezado en cada solicitud)
  • OAuth: adquirir acceso de emergencia, que incluya y un montón de otros parámetros en cada solicitud
  • cookie que almacena la clave de sesión ( "Cookie: ..." encabezado en cada solicitud)
  • galletas Firmado que almacena información de la sesión en la propia
  • galletas

Sólo hay un consumidor API en este momento, por lo que optaron por ir a por algo más simple que podría funcionar - cookies. Son super-fácil de utilizar en los pilones, con la ayuda de Vaso . También "sólo el trabajo" en la aplicación Flash - ya que se ejecuta dentro del navegador, el navegador incluirán las cookies relevantes en las solicitudes que Flash aplicación hace que - la aplicación no necesita ser cambiado en absoluto con respecto a eso. He aquí una pregunta StackOverflow que también aboga por el uso de cookies: REST para aplicaciones web

Vaso también tiene buena característica de de cookies sólo para las sesiones donde todos los datos de la sesión está contenida en la propia galleta. Creo que esto es lo más sin estado como se pone. Hay no de almacenamiento de sesión en el servidor. Las cookies son firmados y opcionalmente encriptados para evitar la manipulación con ellos en el lado del cliente. El inconveniente es que la galleta se hace un poco más grande, ya que ahora necesita almacenar más que clave de sesión. Mediante la eliminación de algunas cosas que realmente no necesita en la sesión (sobras de autenticación OpenID) me dieron el tamaño de las cookies abajo a cerca de 200 bytes.

Otros consejos

OAuth es un mejor ajuste para uso de la API. Aquí está un ejemplo de OAuth en uso en Python: oauth-python-twitter . Leah Culver pitón-oauth biblioteca es la aplicación canónica de OAuth en Python, pero python-OAuth2 es un competidor reciente que está recibiendo algo de ruido. En cuanto a la inspiración, django-pistón tiene soporte para usar OAuth hacer auth cuando la creación de APIs REST para Django, aunque la documentación no es tan bonito como me gustaría para ese tema en particular.

Si se construye la API, se puede comprobar el protocolo OAuth. Es complementaria a OpenID.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top