2012-06-27 23 views
5

Estoy construyendo una API REST usando Grails. Quiero que esté protegido con OAuth2.0 client_credentials flow (grant_type). Mi caso de uso es el siguiente:Grails: Asegurar API REST con OAuth2.0

un agente externo enviará una solicitud a algo así como

http://server-url/oauth/token?client_id=clientId&client_secret=clientSecret&grant_type=client_credentials 

y obtener una señal_acceso. Entonces, mi URL (recurso protegido) debe ser accesible con algo como

http://server-url/resource?access_token={access-token obtained before} 

Busco algo que hace que haciendo esto en Grails fáciles y rápidas. ¿Cuál será la mejor forma/herramienta/complemento para usar para esto? La librería Scribe es una opción, si hay tutoriales para mi caso de uso específico, será genial.

P.S .: He probado la seguridad de la primavera y los complementos relacionados, no me alegro. Cualquier alternativa sería agradable.

+0

Lo sentimos, escriba es del lado del cliente sólo por el momento. Reetiquetando esto –

Respuesta

-1

Basado en mis experiencias, Scribe fue desarrollado para OAuth 1.0 y tiene un soporte muy limitado para OAuth 2.0. De hecho, para probar nuestra propia implementación de OAuth 2, todo lo que podíamos usar de ella era un contenedor de solicitud HTTP, teníamos que hacer cualquier otra cosa manualmente. Afortunadamente, hacerlo manualmente es sorprendentemente fácil.

Como todavía no he encontrado una buena biblioteca abierta de OAuth 2.0 para Java (francamente no estoy familiarizado con Groovy), te animo a que escribas el código de cliente para ti. Ni siquiera necesita un punto final de devolución de llamada del cliente para usar el flujo de concesión de credenciales del cliente. Entonces, simplemente crea una solicitud HTTP (como ya lo mencionaste anteriormente, pero ten cuidado de escapar de los parámetros GET) y obtén el contenido de la respuesta. Su flujo no usa redirecciones, por lo que simplemente analiza el objeto JSON en el contenido de la respuesta, p. con la biblioteca org.json. Finalmente, envíe una solicitud HTTP usando el token de acceso extraído.

Tenga en cuenta que sus ejemplos no son completamente compatibles. El estándar requiere el uso de HTTPS, el envío del token en un encabezado HTTP en lugar de un parámetro GET y sugiere utilizar un encabezado de autorización básico HTTP en lugar de los parámetros GET para especificar las credenciales del cliente.

Es posible que no haya entendido bien su pregunta, y es posible que desee implementar también el lado del servidor. La biblioteca de scripts solo admite el lado del cliente, por lo que puede encontrar una implementación comercial o implementar su propio servidor. Es una tarea compleja, pero si solo admite el flujo de credenciales del cliente, casi se vuelve fácil. ;-)

+0

Gracias por sus entradas. Pero, estoy interesado en la implementación del servidor.No dudé en implementarlo desde cero ya que no soy un experto en seguridad de OAuth y no quiero dejar ningún defecto de seguridad: P. Para ser precisos, estaba buscando algo que podría ayudarme a almacenar/administrar los tokens de acceso generados [invalidarlos automáticamente después del tiempo de caducidad] etc. Por supuesto, uno puede hacerlo desde cero, pero puede dejar algunas lagunas. ¿Existe algo como esto para Java, que proporciona una interfaz fácil para generar, almacenar tokens, etc. en el lado del servidor? – SoftDev

+0

No conozco dicha biblioteca, pero el almacenamiento de tokens es la parte más fácil de implementar como un complemento con una interfaz clara (lo único que necesita es una operación de almacenamiento, carga y revocación). Debería preocuparse más por los detalles de seguridad que implementan el flujo de concesión de las credenciales del cliente y el almacenamiento de los derechos predefinidos para las credenciales del cliente. –

2

Tengo el mismo problema. Encontré muchos plugins de Grails que te ayudaron a autenticar tu aplicación contra otros proveedores de Oauth, pero nada que me ayudara a hacer de mi aplicación el proveedor de Oauth. Después de muchas excavaciones, encontré este plugin de Grails que hará exactamente lo que quieras.

https://github.com/adaptivecomputing/grails-spring-security-oauth2-provider

Todavía estoy configurarlo para mi aplicación, y creo que la documentación puede ser que necesite un par de ediciones (en concreto el flujo authorization_code) pero me dio la client_credentials simples fluyen a trabajar con una configuración mínima. ¡Espero que ayude!

+0

Ese complemento realmente no existe en términos de documentación y está abandonado. Terminé usando Spring Roo en lugar de Grails debido a esto. Hay un plugin muy bueno para Roo, y como Roo es solo una nueva versión de Spring MVC de vanilla, obtienes mucha más documentación oficial. De cualquier forma, si Grails no es un requisito, otros productos de la familia SpringSource (como Spring MVC o Roo) podrían hacer un mejor trabajo para las implementaciones de OAuth. Esto es solo un consejo para todos los interesados. No se supone que sea una respuesta y, como tal, la dejé aquí en los comentarios. – petersaints