api - implementar - oauth2 token
Agregar autenticación OAuth 2.0 a una API RESTful (3)
Tengo una API que requiere autenticación a través de OAuth 2.0. Originalmente anticipé el uso de HWIOAuthBundle ; sin embargo, de la investigación se trata más bien de conectar terceros en el mecanismo de seguridad / autenticación de Symfony y no proporciona el mecanismo necesario para validar los encabezados de Authorization
OAuth 2.0.
Luego encontré información sobre FOSOAuthServerBundle que permite que una aplicación se convierta en su propio proveedor de OAuth 2.0 y que proporciona los mecanismos de seguridad necesarios para validar los encabezados de Authorization
.
Sin embargo, el problema es que me gustaría integrar el proveedor de OAuth 2.0 (servidor de autorización) en una aplicación externa (que contiene la base de usuarios) y no incluirla dentro de la API. Lo cual proporcionará algún mecanismo para realizar la verificación del token en contra de esta aplicación externa a través de (otra) API RESTful.
Puntos:
- La API RESTful requiere autenticación OAuth 2.0.
- El servidor de autorización de OAuth 2.0 se ubicará en una aplicación separada.
Siento que debería usar la concesión Implícita y llamar al servidor de autorización en cada solicitud para validar que el token es correcto.
Es mi pensamiento correcto?
Muchas de las grandes compañías como Google, Facebook, etc. tienen un servidor de autorización separado del servidor API. Consulte el flujo de autorización de OAuth de Google a continuación
También puede consultar la documentación de OAuth de Google para obtener más detalles.
Entonces, todo lo que tendría que hacer es implementar un proveedor de OAuth para que pueda autorizar contra ese proveedor. Hay una lista de bibliotecas disponibles en el sitio web de OAuth: http://oauth.net/code . Puedes mirar específicamente aquí ; hay un ejemplo para ejecutar un proveedor de servicios OAuth en Java.
oAuth definitivamente puede ser un servidor que no sea su servidor de aplicaciones. A continuación se muestra una imagen de cómo se vería la secuencia de autenticación:
- Obviamente, si el foro no puede decodificar o validar el token, el foro devolverá un código de estado 401 en lugar de un código de estado de 200.
Siempre que su servidor oAuth y el Foro compartan la misma clave pública, está más que de acuerdo con dividir su servidor oAuth y su aplicación.
De hecho, eche un vistazo a jwt.io. Pega el token que obtienes del servidor oAuth allí. Debería poder decodificar el token de inmediato. Luego, puede colocar su clave pública en el cuadro de texto "secreto" para verificar que el token esté verificado.
Su aplicación (Forum, en este ejemplo) debería poder hacer lo mismo:
1) Toma el token del encabezado de Autorización de la solicitud
2) Decodifica el token
3) Verifique la fecha de caducidad
4) Verifica el token con la clave pública de oAuth
5) Devuelve un código de estado exitoso o un código de estado de falla
En la medida en que desacierte su requisito, necesita autenticar sus API a través del Servidor de Autorización OAuth externo:
El cliente debe proporcionar el token de acceso recuperado en los pasos anteriores junto con la solicitud para acceder al recurso protegido. El token de acceso se enviará como un parámetro de autorización en el encabezado de la solicitud.
El servidor autenticará la solicitud en función del token.
Si el token es válido, el cliente obtendrá acceso al recurso protegido, de lo contrario, se denegará el acceso.
aquí hay un ejemplo que podría ayudarlo a lograr su requerimiento. Verifique este documento .
O simplemente, puedes hacer con Jersey y Oauth
Además, puede consultar Apache Oltu y descubrir la manera de lograr su requerimiento.