2011-02-11 17 views
40

Estoy tratando de poner en práctica la gestión de sesiones en mi servicio REST. Llegué a conocer estas pautas mientras navegaba:Sesión: ¿Cómo generar token de autenticación para el servicio REST? (Jersey)

  1. No se usan las sesiones del lado del servidor - viola el principio RESTful.

  2. Utilización del protocolo HTTP de autenticación básica - No es posible en este momento, ya que se me pide no utilizar SSL/TLS (. Que sin duda es necesario para autenticación básica)

  3. El uso de HTTP Digest - Me han dicho que esto aumenta la red tráfico. Esto suena costoso, especialmente cuando mi cliente es un dispositivo móvil.

  4. el uso de cookies - Me dicen que nunca se debe confiar en la galleta para asegurar mis recursos importantes, que pueden ser falseadas fácilmente. Además, leí sobre ataques de scripting entre sitios a través de cookies.

  5. Me queda la opción de generar un token de autenticación, que el usuario debe enviar cada vez, lo cual, reconozco, no es "completamente" RESTful.

Ahora lo que necesito saber, ¿cómo debería generar estos tokens de autenticación únicas, que son lo suficientemente seguros a nivel empresarial? ¿Hay alguna biblioteca para Jersey? ¿Debo ir por OAuth? Acabo de leer un poco sobre ellos, ¿son útiles en mi caso? Tenga en cuenta que mis clientes objetivo son dispositivos móviles: ¿pueden acceder a un servicio OAuth?

Respuesta

35

Por razones de simplicidad, genero mi propio token de autenticación usando UUID antes de cifrar todo el token con Jasypt: -

String key = UUID.randomUUID().toString().toUpperCase() + 
     "|" + someImportantProjectToken + 
     "|" + userName + 
     "|" + creationDateTime; 

StandardPBEStringEncryptor jasypt = new StandardPBEStringEncryptor(); 

... 

// this is the authentication token user will send in order to use the web service 
String authenticationToken = jasypt.encrypt(key); 

La clave contiene la creationDateTime para que pueda usarlo para verificar el tiempo-a- vivir. De esta forma, si el usuario utiliza el mismo token de autenticación después de X minutos, no va a trabajar más, y voy a enviar de vuelta un código 403 prohibido.

+0

Gracias LIMC! Mientras tanto, eché un vistazo a la clase SecureRandom de Java. ¿Es preferible a tu método? Tanto – SlowAndSteady

+0

funciona bien, en mi opinión ... añadiendo un 'creationDate' hace que el token bastante único junto con la clave generada a partir de' 'UUID' o SecureRandom'. La pieza importante es el 'creationDate' para que compruebes contra TTL. – limc

Cuestiones relacionadas