Estoy construyendo Torres de alta tensión basado en la web de la aplicación con la API RESTful, que actualmente no tiene ningún tipo de autenticación. Así que me voy a implementar y con el fin de evitar todos los problemas y precaución con el almacenamiento de las contraseñas de usuario, me gustaría utilizar OpenID para la autenticación. ¿Cuál sería la mejor manera de hacer esto? Son estas dos cosas son compatibles? ¿Existe Api REST que el uso de OpenID que puedo tomar inspiración de?

3 Comentarios

  1. 31

    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 el servicio y la API de los consumidores. El consumidor está basado en Flash de la aplicación que se sirve de la misma máquina que la API es ahora y se supone que se utiliza en el navegador. No hay una tercera parte de los clientes a la vista todavía.

    Así que la pregunta puede ser dividido en dos partes,

    • ¿cómo puedo hacer el OpenID de autenticación a través de la API
    • ¿cómo puedo mantener la «autentica» estado en las solicitudes posteriores

    Para la primera parte, OpenID authentication casi siempre incluye pasos interactivos. Durante el proceso de autenticación no puede ser un paso en el que el usuario está en OpenID la página web del proveedor, firma y pulsando algún botón «acepto». Así que la API no puede y no debe manejar de forma transparente (no «dime tu OpenID provider y contraseña y yo haré el resto»). Mejor que puede hacer es pasar adelante y atrás HTTP enlaces que el cliente tiene que abrir y siga las instrucciones.

    Mantener la «autentica» estado

    Las Api de REST debe ser apátridas, cada solicitud debe incluir toda la información necesaria para manejar esto, ¿verdad? No tendría ningún sentido para autenticar contra OpenID provider para cada solicitud, así algunos tipo de sesión es necesario. Algunas de las opciones para la comunicación de la clave de sesión (o «access token» o nombre de usuario/contraseña) son:

    • HTTPS + autenticación BÁSICA («Authorization: Basic …» encabezado en cada petición)
    • Solicitudes de firma de Amazon estilo («Autorización: AWS …» encabezado en cada petición)
    • OAuth: adquirir Token de Acceso, que incluyen y un montón de otros parámetros en cada solicitud
    • Cookie que almacena la clave de sesión («Cookie»: … » encabezado en cada petición)
    • Firmado cookie que almacena la información de la sesión en la cookie en sí

    Sólo hay una API de derecho del consumidor, así que decidí ir por la cosa más simple que eso podría funcionar, las cookies. Son súper fáciles de usar en Torres de alta tensión, con la ayuda de Vaso de precipitados. También «sólo trabajo» en la aplicación Flash, ya que se ejecuta dentro del navegador, navegador incluirá las cookies en las peticiones que, en aplicación Flash hace — la aplicación no necesita ser cambiado nada con respecto a eso. He aquí una pregunta de StackOverflow que también aboga por el uso de las cookies: Reparador de autenticación para las aplicaciones web

    Vaso de precipitados también tiene buena característica de la cookie sólo las sesiones donde todos los datos de la sesión está contenida en las «cookies». Supongo que esto es acerca de como apátridas como se pone. Hay no período de sesiones de la tienda en el servidor. Las Cookies son firmado y opcionalmente encriptada para evitar la manipulación con ellos en el lado del cliente. El inconveniente es que la cookie es un poco más grande, ya que ahora necesita almacenar más que de la clave de sesión. Mediante la eliminación de algunas cosas que realmente no se necesitan en la sesión (las sobras de OpenID authentication) tengo la cookie tamaño de hasta unos 200 bytes.

  2. 4

    OAuth es una mejor opción para el uso de la API. He aquí un ejemplo de OAuth en el uso de Python: oauth-python-twitter. Leah Culver python-oauth biblioteca es canónica de la aplicación de OAuth en Python, pero python-oauth2 es una reciente contendiente que está haciendo algo de ruido. Para inspiración, django-pistón tiene soporte para el uso de OAuth para hacer auth cuando la creación de APIs RESTful para Django, aunque la documentación no es tan bonito como me gustaría para ese tema en particular.

    • La API está destinado actualmente a escenario cliente-servidor. El cliente es el Flash de la aplicación y el servidor es Pilones webapp. Actualmente no hay ningún servidor-a-servidor de cosas por lo que no necesita de 3 patas cosas todavía. Mi problema actual es ¿cómo puedo introducir «usuarios autenticados» en el sistema sin tener que lidiar con el almacenamiento de contraseñas, el envío de recordatorios de contraseñas, restablecer contraseñas y así sucesivamente. No es claro de inmediato cómo OAuth me ayuda aquí, ya que en 2 patas versión sólo se especifica cómo firmar las solicitudes.
    • En ese caso, tal vez una de las pastas en pylonshq.com/pasties/by_tag/openid va a ayudar.
  3. 3

    Si la generación de la API, se puede comprobar protocolo OAuth. Es complementaria a la de OpenID.

Dejar respuesta

Please enter your comment!
Please enter your name here