c# - integrar - oauth2 tutorial
Implementando la autenticación de OAuth 2.0 para mi API (1)
He estado usando la API de Facebook Graph (usa oauth 2.0 para la autenticación) con éxito por un tiempo. Ahora necesito escribir mi propia API que permita a los desarrolladores conectarse a ella de una manera similar. He buscado en varias bibliotecas, pero me gustaría algo un poco más delgado, así que he decidido rodar la mía. Mirando el código que tengo para autenticar a un usuario en Facebook parece relativamente simple, pero corríjame si me estoy desviando del camino.
Primero necesitaría proporcionar una página segura a la que el consumidor tendría que redirigir. por ejemplo, https://api.mydomain.com/oauth/authorize?client_id=CONSUMER_KEY&redirect_url=CALLBACK_URL . El usuario verificará la aplicación y luego redireccionaría de nuevo 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 una cadena única aleatoria aquí para el outh_token y almacenarla contra el usuario para este consumidor en particular (EDITAR: consulte la respuesta a continuación, esta debe ser única para cada aplicación del consumidor y no para el usuario).
Ese es el paso 1 en el camino. Ahora necesito proporcionar una segunda página segura a la que el consumidor desencadenaría 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 intercambiar 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ía access_token para los métodos que intentan obtener información específica del usuario que la está utilizando.
Me gustaría saber si he entendido las cosas correctamente. La especificación OAuth 2.0 parece extremadamente trivial si ese es el caso. Además, ¿por qué tenemos que intercambiar el oauth_token con un access_token? Tengo mi propia idea, pero agradecería que alguien ayudara a aclarar esto.
Realmente agradecería sus comentarios, ya que no deseo seguir adelante y perder horas implicando esto cuando está completamente equivocado.
Gracias
En realidad, los diagramas de flujo de protocolo serían extremadamente útiles para visualizar especificaciones como la de OAuth 2, pero solo hay algunos trabajos parciales por ahí. Como acabo de implementar una biblioteca OAuth 2 del lado del cliente, puedo verificar que está en el camino correcto. Pero aquí hay una trampa:
oauth_token pertenece a su aplicación cliente (es decir, un lector de facebook de escritorio) que autentica su aplicación (como una identificación). Envía esto para recuperar un access_token, que es específico para tu aplicación y el usuario que inició sesión, lo que te permite acceder a recursos restringidos relacionados con el usuario.
Aquí hay un proceso básico de autenticación de la aplicación de escritorio (tomado de: http://developers.gigya.com/020_Developer_Guide/85_REST/OAuth2 )
En realidad, un diagrama de flujo con línea de tiempo (de arriba a abajo, tomado de: http://www.ibm.com/developerworks/web/library/wa-oauthsupport/?ca=drs- )
Y finalmente, el procedimiento completo es: (tomado de http://h2anetwork.org/ProjectDocs/DPI/DPI_Framework.html )