2012-06-17 29 views
6

Estoy construyendo un servicio web tranquilo basado en Spring. Estoy usando Spring Security. Solo se accederá mediante aplicaciones de escritorio. Básicamente, un servicio web de máquina a máquina.Autenticación en un servicio web RESTful

  • Quiero un servicio personalizado que realice la autenticación. A continuación, realice otras operaciones más confidenciales basadas en el resultado de la autenticación.

  • Otra opción es enviar las credenciales en el cuerpo de cada solicitud y básicamente hacer la autenticación cada vez.

La lógica dice que el primer enfoque sería el más eficiente porque no es bastante cierta sobrecarga en la autenticación de cada uno y cada una.

¿Qué sugieres relacionado con esto? Para ir sin estado o con estado? ¿Hay grandes desventajas para el enfoque con estado?

Hasta este momento he leído algunos capítulos del Java Web Services Up and Running y también varias preguntas de SO como this.

Respuesta

3

La forma RESTO de hacerlo es, como se indica en los enlaces suministrados por el usuario, para autenticar en cada solicitud, y no a mantener las sesiones.

En cuanto a la autenticación con nombre de usuario/contraseña en cada solicitud, es seguro si puede usar ... una capa segura (https); de lo contrario, el par se envía en texto claro y detectable.

Otra opción es utilizar algo así como la forma de AWS para hacerlo (enlaces a Amazon here y here, por ejemplo). Aquí para otras explicaciones: buzzmedia y samritchie

Quizás OAuth es una opción, pero no tengo experiencia en ello.

+0

Esto es más como un patrón de diseño para la seguridad dentro de los servicios web REST. Mi pregunta es: ¿no es esto más lento, menos eficiente? En un servicio web basado en SOAP, no conozco ninguna recomendación para evitar las sesiones. ¿Hay claras ventajas de ser totalmente apátrida? ¡Gracias! –

+0

En cuanto al rendimiento: Diría que las pocas instrucciones necesarias para calcular un hash, o los pocos bytes transmitidos para la información de autenticación, son irrelevantes en comparación con la transmisión general y el tiempo de procesamiento de solicitud. – jmclem

+0

Sí, el tiempo de procesamiento de solicitud puede ser un problema. Quiero decir, cada vez que se pasan las credenciales, se debe realizar una búsqueda en la base de datos para autenticar al usuario. –

0

Para empezar resto servicio (cliente - servidor) Voy a recomendar encarecidamente que utilice Restlet

autenticación al servicio por resto puede ser definido usando ClientResource. Ejemplo:

private static ClientResource getClientResource(String uri) { 
ClientResource clientResource = new ClientResource(uri); 
clientResource.setChallengeResponse(ChallengeScheme.HTTP_BASIC, 
     "username", "password" 
     ); 
return clientResource; 
} 
+0

Si bien agradezco la sugerencia, me gustaría saber si el envío del nombre de usuario y la contraseña para cada solicitud es una opción viable cuando se trata de asegurar un servicio web REST. ¡Gracias! –

+0

Puede autenticarse a través de un recurso de inicio de sesión y luego verificar si hay una cookie en cada solicitud. Así es como lo hacemos al menos – Gonzalo

Cuestiones relacionadas