2011-04-27 18 views
13

necesito algunos consejos sobre cómo proteger mi solicitud:autenticación REST/autorización

Tengo un servicio REST, utilizando Spring MVC 3

tengo mi aplicación cliente, utilizando Ext GWT 2.2

Las credenciales de los usuarios solo están disponibles en el lado del servidor.

SSL disponibles

servicios REST sólo deben ser utilizadas por los usuarios authentificated.

He leído acerca de HTTP Digest, autorización basada en token, oAuth, etc., pero necesito algunas aclaraciones y consejos sobre cómo proteger mi aplicación, y qué métodos son los mejores en mi caso.

Respuesta

26

aquí está la metodología que creamos para nuestras aplicaciones, funciona muy bien y es muy segura.

esta es una explicación muy conceptual, hay una gran cantidad de código que respalda esta afirmación, FYI

  • Al usuario se autentica o crea la cuenta, el servidor devuelve un certificado X.509, base64, que es único para el usuario. El servidor almacena una copia.

  • Cada vez que el cliente necesita acceder a la API REST, el cliente crea una cadena JSON compuesta de lo siguiente.

  • Los usuarios Steam ID (identificación de usuario)

  • Un GUID o UUID, que garantiza esta llamada es único, (CallID) (protege contra ataques de repetición)
  • Un diccionario (colección de clave/valor) de cada parámetro de la llamada resto

entonces cifrar esa cadena con la clave pública X.509, y codificar de nuevo a cadena de base 64, y toma este valor cifrado y añadir el ID de usuario a un objeto JSON que llamamos el token .

que a continuación ponemos el token en la cabecera de cada llamada, y lo llamamos algo así como: X-Auth-UserToken

en cada llamada al servidor toma el token, busca el certificado de usuarios basado en el ID de usuario, a continuación, verifica que la parte cifrada del token se puede descifrar con la clave privada que el servidor tiene para el usuario.

una vez descifrado, el servidor toma el CallID y verifica que sea único, frente a su propio calllog db.

si se retira, el usuario está autenticado.

una vez que el usuario está autenticado, puede aplicar sus propias reglas de autorización en función de uniqueID de los usuarios.

Por supuesto, todo lo anterior es a través de SSL.

avíseme si necesita que profundice en cualquier pieza.

+0

Brilliant! He estado buscando esto. – Mikecito

+0

Es posible que desee consultar WebID http: //www.w3.org/wiki/WebID es una forma estandarizada de hacer más o menos lo que parece estar describiendo. –

+0

¿No es la sesión suficientemente segura cuando el servidor devuelve un token temporal sobre ssl cuando el usuario se autentica? ¿Qué beneficio tiene un certificado adicional si la conexión ya está asegurada sobre ssl? –