2011-06-01 33 views
16

Antes que nada, permítanme comenzar diciendo que esta pregunta no se trata de diferentes implementaciones de openID y oAuth. Hay muchas clases sobre esto.Integración de openID y oauth como inicio de sesión del sitio web, inicio de sesión y sistema de autenticación

Mi pregunta es qué hacer después de autenticar un usuario:

  • Cómo agregar este usuario a la tabla de usuario en la base de datos?
  • ¿Cómo manejar diferentes inicios de sesión para el mismo usuario? (Reys Sharp example sugiere algo para openID)
  • ¿Cómo combinar oAuth y openID en la base de datos?

¿Alguna idea?

+2

Tendrás que decidir de alguna manera para reconciliar las credenciales de inicio de sesión dispares-- esto generalmente se hace usando el correo electrónico del usuario como una clave serogate única entre oAuth y usuarios de openID. – colinross

Respuesta

12

Su pregunta tiene que partes principales a ella:

  1. autenticación
  2. Autorización

Por lo general, los dos no son tratados de manera diferente si el proveedor de identidad (IP) corre a su propia, que tiene sido la configuración más común en aplicaciones web hasta ahora.

Al utilizar un proveedor de OpenId como Google, la parte de autenticación está separada de su control. Obtendrá un token que le indicará si el usuario está autenticado o no. El token normalmente contendrá las siguientes afirmaciones: nombre, correo electrónico e identidad con nombre, donde el último es el ID único de la identidad en el IP.

Hasta ahora todo bien.

El truco es ahora como usted pregunta, ¿cómo puedo autorizar a este usuario?

Bueno, hay un par de enfoques para esto.

En primer lugar, cuando crea un usuario local en su sistema, puede rellenar previamente los valores de Nombre y Correo electrónico basados ​​en los reclamos que obtiene de la IP. En este proceso, puede comenzar y decir que todos los usuarios que tienen un perfil almacenado en su sistema están autorizados, o puede desarrollar procesos adicionales que agregarán los detalles que necesita saber sobre el usuario.

Entonces, ¿cómo evitar que el usuario no se vuelva a registrar si cambian de google a facebook como IP?

Aquí es donde las cosas se ponen difíciles. El reclamo más común que Google, Yahoo, Facebook le proporcionará es la dirección de correo electrónico y el Nombre. Entonces, lo que puede hacer es intentar hacer coincidir la reclamación entrante con los clientes existentes en su aplicación. Sin embargo, esto no es a prueba de fallas, ya que las personas pueden tener diferentes correos electrónicos en diferentes sistemas.

El valor del nombre tampoco es seguro.

En nuestra configuración, comenzamos por coincidir con los correos electrónicos, ya que sabemos que la mayoría de los IP validan las direcciones de correo electrónico. Esto reducirá mucho los duplicados. Después de ese control, comenzamos nuestro propio proceso de validación donde el objetivo es ver si la persona ya está registrada. Este proceso busca el número móvil de los clientes en nuestra base de datos, y si se encuentra una coincidencia, le enviamos una contraseña de un solo uso al cliente para verificar la correcta propiedad del número de teléfono.

Dado que el inicio de sesión es una configuración sensible al tiempo, se crea una tabla SQL simple que asigna identidades externas a nuestros números de cliente. Esto nos permite implementar este tipo de lógica de validación fuera de todas nuestras aplicaciones web (y por lo tanto reducir la redundancia de código)

8

La manera más simple me parecería, tener una tabla de usuario básica, donde agrega al usuario en el registro y tiene una tabla adicional 1: n donde guarda posibles autenticaciones. Tal vez necesite más de una tabla, si hay métodos, que necesitan mucho más columnas que otros.

0

Implementé el inicio de sesión a través de OpenID desde google y encontré problemas similares. Utilicé openid library de janrain.

No creé una tabla separada para openid. En su lugar, utilicé correos electrónicos secundarios (los correos secundarios se almacenan en la tabla de usuarios).

Al iniciar sesión en google, es posible solicitar correos electrónicos de los usuarios (creo que hay la misma oportunidad en cualquier otro proveedor de openid). Después de obtener la respuesta de Google de que el usuario está conectado, miro en la tabla de usuarios. Si se proporcionó un correo electrónico en la tabla (no importa si es primario o secundario), inicio sesión con el usuario. Si no se encuentra el correo electrónico, le pregunto al usuario si tiene una cuenta. En caso afirmativo, se le propone iniciar sesión con el nombre de usuario/contraseña existente, luego de eso agrego un correo electrónico secundario al usuario. Si el usuario no tiene una cuenta, se crea una nueva cuenta.

Así que no necesita nuevas tablas especiales para estos trucos.

+1

correos electrónicos están sujetos a cambios. El único reclamo único que no cambia es la identidad con nombre de un proveedor. (por ejemplo, su nombre de usuario en google o facebook) –

Cuestiones relacionadas