2011-05-13 26 views
30

He estado usando la API Graph de Facebook (usa oauth 2.0 para autenticación) exitosamente desde hace un tiempo. Ahora necesito escribir mi propia API que permita a los desarrolladores conectarse a ella de manera similar. He buscado en varias bibliotecas, pero me gustaría algo un poco más delgado, así que he decidido sacar el mío. Ver el código que tengo para autenticar a un usuario en Facebook parece relativamente simple, pero por favor corrígeme si me estoy desviando.Implementando la Autenticación OAuth 2.0 para Mi API

Primero tendría que proporcionar una página segura a la que el consumidor tendría que volver a dirigir. por ejemplo, https://api.mydomain.com/oauth/authorize?client_id=CONSUMER_KEY&redirect_url=CALLBACK_URL. El usuario verificaría la aplicación y luego redireccionaría a la url proporcionada en la url de devolución de llamada con oauth_token en la cadena de consulta. Supongo que podría generar aquí una cadena única aleatoria para oauth_token y almacenarla contra el usuario para este consumidor en particular (EDIT: vea la respuesta a continuación, esto debe ser único para cada aplicación de consumidor y no para el usuario).

Ese es el paso 1 del camino. Ahora necesito proporcionar una segunda página segura a la que el consumidor activará una solicitud web. por ejemplo, https://api.mydomain.com/oauth/access_token?client_id=CONSUMER_KEY&client_secret=CONSUMER_SECRET&oauth_token=OAUTH_TOKEN_RETURNED_ABOVE. Esto permitiría al consumidor cambiar el oauth_token devuelto anteriormente por un token de acceso. De nuevo, simplemente generaría una cadena aleatoria única y la almacenaría contra el usuario para este consumidor en particular.

Ahora mi API aceptará access_token para los métodos que intentan obtener información específica para el usuario que la está utilizando.

Me gustaría saber si he entendido las cosas correctamente. La especificación de OAuth 2.0 parece extremadamente trivial si ese es el caso. ¿Por qué también tenemos que intercambiar el oauth_token con un access_token? Tengo mi propia idea, pero agradecería que alguien pudiera ayudar a aclarar esto.

Realmente agradecería sus comentarios ya que no deseo seguir adelante y perder horas implementando esto cuando está completamente equivocado.

Gracias

Respuesta

48

En realidad diagramas de flujo de protocolo sería extremadamente útil para la visualización de las especificaciones como la de OAuth 2, pero sólo hay algunas obras parciales que hay. Como acabo de implementar una biblioteca OAuth 2 solo para el cliente, puedo verificar que está en el camino correcto. Pero aquí hay un truco:

oauth_token pertenece a su aplicación cliente (es decir, un lector de Facebook de escritorio) que autentica su aplicación (como una ID). Usted envía esto para obtener un access_token, que es específico para su aplicación y usuario registrado, que le permite acceder a los recursos restringidos relacionados con el usuario.

Aquí es un proceso de autenticación de la aplicación de escritorio básica (tomado de: http://developers.gigya.com/020_Developer_Guide/85_REST/OAuth2)

REST OAuth 2.0

En realidad un digram flujo con línea de tiempo (de arriba a abajo, tomado de: http://www.ibm.com/developerworks/web/library/wa-oauthsupport/?ca=drs-)

Protocol flow

Y, finalmente, el procedimiento completo es: (tomado de http://h2anetwork.org/ProjectDocs/DPI/DPI_Framework.html)

OAuth protocol flow

Cuestiones relacionadas