Autenticación HTTP REST - ¿Cómo?


Por lo tanto, estoy desarrollando un REST webservice utilizando RESTEasy y Google App Engine. Mi pregunta no está relacionada con GAE, pero la mencioné por si acaso importa. Sucede que, naturalmente, necesito proteger mis recursos y mis propios usuarios (no los de Google).

Asegurar un servicio web REST parece un tema muy controvertido, o al menos muy 'liberal'. El RESTO no impone ningún estándar en este asunto. De lo que he investigado en la web y la literatura, hay al menos 3 enfoques que creo que podría encajar en mi aplicación:

  • HTTP Basic (con SSL)
  • HTTP Digest (con SSL)
  • OAuth

OAuth parece el enfoque más completo. Pero no creo que se necesite tal complejidad porque no necesitaré autorizar ninguna aplicación de terceros. Es un servicio web para ser consumido solo por mis propias aplicaciones cliente.

HTTP Basic y HTTP Digest aparecen como las más simples en la web, pero el hecho es que nunca he encontrado una implementación concreta de ellos usando RESTEasy, por ejemplo. He encontrado esta página y esta en la documentación de RESTEasy. De hecho, son muy interesantes, pero dicen poco o nada sobre este tema (HTTP Basic o Digest).

Entonces, aquí estoy preguntando:

¿Cómo puedo proteger mi servicio web usando HTTP Basic o Digest en RESTEasy?

Tal vez es tan simple que no vale la pena mencionarlo en la documentación o en cualquier otro lugar? Además, si alguien puede darme alguna idea sobre el asunto de asegurar servicios web RESTful, podría ser útil.

¿Estoy eligiendo los enfoques correctos?

Author: casperOne, 2012-01-09

4 answers

La forma más sencilla de asegurar una API REST es usar autenticación básica HTTP a través de SSL. Dado que los encabezados están encriptados, no tiene mucho sentido usar Digest. Esto debería funcionar muy bien, siempre y cuando pueda mantener la contraseña segura en el cliente(s).

 6
Author: Luke Francl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-09 22:47:56

He logrado lograr esto mediante el uso de los interceptores de RESTEasy. Básicamente, las solicitudes son interceptadas mediante el uso de un oyente como la clase. En esta clase inspecciono los encabezados HTTP de la solicitud y luego el proceso Básico-Auth normal continúa.

Enlaces útiles:

Http://en.wikipedia.org/wiki/Basic_access_authentication
Paso de parámetros en el encabezado del mensaje con una API REST
http://www.alemoi.com/dev/httpaccess/ (el Servlet part)

Espero que esto ayude a alguien.

Gracias.

 6
Author: miguelcobain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:01:59

Definitivamente se enfrentará a un riesgo de seguridad al usar cualquier método de autenticación sin SSL.

Pero si usaste SSL, generalmente sufrirás de un mal rendimiento.

Oauth es en realidad una solución para permitir que 3rd party obtenga acceso a sus servicios web.

Debido a la selección limitada, mi solución para un servicio web actual que requiere autenticación utilizó la combinación de SSL + basic

 1
Author: ligerdave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-12 15:59:55

Puede ver el uso de OAuth 2. Es significativamente más simple que OAuth 1 y está siendo utilizado activamente en API REST grande por Facebook y Google.

 0
Author: abraham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-09 04:36:11