2012-07-04 19 views
18

Estoy desarrollando una aplicación móvil nativa para una aplicación de red social personalizada basada en la web. Estamos construyendo una API REST para comunicarnos con el servidor web, y hemos elegido OAuth2 como el método de autenticación (el flujo grant_type=password).Flujo de "inicio de sesión social" de OAuth2 (permitir la autenticación OAuth2 a través de Facebook/Twitter): ¿hay ejemplos/literatura?

La aplicación web permite a los usuarios iniciar sesión y registrarse utilizando servicios externos (es decir, Facebook y Twitter). Necesitamos permitir lo mismo también en la aplicación móvil. La pregunta es: ¿cómo podemos hacer eso?

La aplicación móvil Pinterest es capaz de gestionar la situación (ver imagen adjunta). ¿Cuál es el flujo que se ha usado aquí?

Pinterest Login View

se comportan como una aplicación de OAuth con alimentación clásica (la aplicación móvil que actúa como cliente de OAuth directamente con la API de Facebook?). Si es así, ¿cómo se puede autenticar la aplicación móvil con el servidor de Pinterest? ¿Está pasando el token de acceso de Facebook OAuth como credenciales?

Representación gráfica del problema (véase la flecha marcada con ????):

Website API     Mobile app     Facebook OAuth 

    +       +        + 
    |       |        | 
    |       |  /oauth2/token   | 
    |       +------------------------------>| 
    |       |        | 
    |       |  OAuth Access Token  | 
    |       |<-----------------------------+| 
    |       |        | 
    |   ????   |        | 
    |- - - - - - - - - - - - - -|        | 
    |       |        | 
    |       |        | 
    | OAuth Access Token  |        | 
    |+------------------------->|        | 
    |       |        | 
    |       |        | 
    | API Usage (w/ token) |        | 
    |+------------------------->|        | 
    |<-------------------------+|        | 
    |       |        | 
    |+------------------------->|        | 
    |<-------------------------+|        | 
    |       |        | 
    |   ...    |        | 
    +       +        + 

Actualización:This question is quite similar a la mía .. Si este es el camino correcto a seguir, a continuación, la segunda + tercer paso (la transmisión del token de Facebook a nuestra API personalizada, más la validación del token en sí) no podría ser un tipo de concesión OAuth2 adicional (es decir, facebook_token).

+0

¿Qué pasa con el proxy de todas las solicitudes API y la modificación de urls, encabezados y parámetros de solicitud con los suyos? – makevoid

+0

¿Qué quieres decir con eso? :) –

+0

Hola, estoy enfrentando exactamente el mismo problema. ¿Encontraste una solución funcional para hacer eso? gracias –

Respuesta

2

No soy un desarrollador de iOS, pero actualmente estoy desarrollando un flujo de trabajo similar en un entorno .NET, utilizando la biblioteca de código abierto DotNetOpenAuth. Tal vez echarle un vistazo puede ayudar.

Primero: la metodología de autenticación depende de los proveedores que desea admitir.

unas pocas lecturas que pueden aclarar:
http://softwareas.com/oauth-openid-youre-barking-up-the-wrong-tree-if-you-think-theyre-the-same-thing http://openid.net/get-an-openid/what-is-openid/
http://blog.bobcravens.com/2010/08/openid-and-oauth-using-dotnetopenauth-in-asp-net-mvc/ http://stackoverflow.com/questions/7996124/cómo-a-Autorizar-mobile-apps-con-un-tercero-por-oauth-pero-connect-a-mi-Servi

genérico de flujo de trabajo de autenticación:
inicia la aplicación 1. La web mediante la presentación un área que permite al usuario seleccionar entre varios proveedores de OpenID/OAuth.
2. Su aplicación redirecciona al servidor del proveedor (después de que sea posible, agregue información de alguna aplicación a los datos de la publicación; consulte la referencia específica de la API del proveedor para obtener más información). Tanto OpenID como OAuth usan una serie de redireccionamientos para autenticar al usuario. La clave es que la autenticación ocurre en el sitio del proveedor y ahí es donde se almacenan las contraseñas.
3. El usuario inicia sesión en el proveedor seleccionado, luego se produce una nueva redirección a su sitio (a través de un mecanismo de URL de devolución de llamada).
4. Este redireccionamiento incluye información sobre el usuario autenticado que es proporcionado por los proveedores de OpenID/OAuth. Como mínimo, la redirección proporciona un 'nombre de usuario' a su aplicación.
5. Utilice esta información para verificar si el usuario autenticado puede ingresar a su sitio.

+1

Gracias Gianni, pero el problema aquí no es con la aplicación web actuando como un cliente de OAuth con Facebook: eso es todo lo clásico y documentado. Mi pregunta es acerca de una aplicación móvil que quiere usar una API personalizada, pero necesita autenticarse NO con una conexión OAuth directa, sino a través de un autorizador OAuth de terceros (es decir, Facebook). –

1

Stefano

Utilizamos StackMob para esto.Funciona muy bien y es muy simple de implementar.

El SDK de StackMob ofrece seguridad y autenticación OAUTH2 a través de Facebook y Twitter.

actualización: StackMob no longer exists as of May 2014

+1

Sería amable de su parte explicar * dónde * y * cómo * el OP podría usar este SDK para o por qué cree que esto * responde * a cualquiera de sus preguntas. –

+0

Sí, gracias Radesix, puedo ver su API [admite llamadas para crear e iniciar sesión usuarios usando Facebook] (https://stackmob.com/devcenter/docs/User-Authentication-API) pero no puedo encontrar nada relacionado con OAuth2. Claro, parece que también admiten el protocolo OAuth2, pero no para resolver este problema en particular. –

+0

Stefano, no estoy seguro de por qué esto no resolverá su problema. StackMob usa OAUTH 2 como lo está solicitando. ¿Me estoy perdiendo de algo? – radesix

4

Puedes probar a utilizar el acceso fb simbólico que acaba de recuperar en su dispositivo móvil. (puede ser cualquier otro proveedor). Envíelo a su servidor a un servicio web de inicio de sesión/registro/ambos. En el lado del servidor puede verificar quién es el usuario utilizando fb sdk y el token de acceso, inicie sesión en el usuario y le envíe la cookie/sesión.

0

Cree ID de cliente OAuth diferentes para sus proveedores de inicio de sesión social.

Ejemplo:

Facebook - ID de cliente # 1 Twitter - ID de cliente # 2


Crea tus rutas públicas para usted flujos sociales.

Ejemplo:

http://www.test.com/auth/facebook/ http://www.test.com/auth/facebook/callback/

En caso de éxito de la devolución de llamada proveedor sociales, usted tendrá que obtener mediante programación los datos de su almacén de datos para el usuario en cuestión y luego generar el token de acceso con el alcance predefinido que desee otorgar para el Client ID en cuestión.


En el caso de que usted tenía una tercera parte directamente de intentar interactuar con sus propios clientes, tratando de usar su API, que va a tener que ser un proceso de 2 pasos.

Primero ellos (el cliente) tienen que pasar por el proceso de inicio de sesión social como se explicó anteriormente.

Luego, en la devolución de llamada del proveedor social exitosa necesitaría mostrar una interfaz (probablemente basada en la web) al cliente que les permita aceptar/denegar el alcance de los derechos solicitados por la tercera parte. En el bit de inicio de sesión social inicial, obviamente debe pasar un largo o almacenar el alcance solicitado por la tercera parte para pasarlo a largo para el paso de devolución de llamada del proveedor social.

Cuestiones relacionadas