Estoy buscando a utilizar la Primavera de la Seguridad de un Spring MVC aplicación que será estrictamente un JSON servicio web. Yo he hecho algunas investigaciones y leer un par de artículos, pero no he encontrado nada completa. Quiero que la aplicación sea completamente apátridas y uso basada en token de autenticación. No quiero que el MVC de Spring aplicación tiene todas las formas o formularios utilizados para autenticar. Se debe estrictamente a tomar las solicitudes y datos en JSON, y devolver respuestas JSON.

Habrá un Angular JS aplicación de cliente que se necesita para enviar el nombre de usuario y contraseña y obtener el token de la aplicación para ser utilizada en secuencial de las solicitudes. En algún momento puede ser Android los clientes que tienen acceso a este servicio web.

Estoy asumiendo Spring Security tiene su manera internamente para la asignación de un token de sesión de un usuario, lo que significa que sabe token XXXXXXXXXXXX es usuario administrador Bob y token AAAAAAAAAA es usuario estándar Joe. Sin embargo, yo no tengo mucha experiencia con Spring Security, así que no sé cómo todo esto viene junto. Todavía quiero ser capaz de utilizar asegurado anotaciones en el controlador y los métodos de servicio.

Hay una manera de lograr esto en la Primavera de de Seguridad?

Esta pregunta parece ser un buen lugar para comenzar, pero no estoy seguro de que esto va a funcionar como la imaginaba RESTful Authentication a través de la Primavera.

InformationsquelleAutor greyfox | 2014-06-10

3 Comentarios

  1. 18

    Este será un buen lugar para comenzar con Primavera-Resto-Repetitivo.

    1. Por primera vez, usted tiene que utilizar la autenticación básica de http y
      luego de inicio de sesión (enviar nombre de usuario/contraseña) y este va a devolver el token.
    2. En la posterior solicitud de que se utilice este token de autenticación.
    3. Usted tendrá que agregar un filtro a la cadena que va a hacer que
      la autenticación basada en token.

    Tienes que venir para arriba con un token de formato y cifrado para el mismo. Lo ideal es que la necesidad de mantener un vencimiento por el token demasiado, vencimiento junto con el nombre de usuario podría ser una parte de la señal.El uso de un algoritmo de cifrado una función criptográfica de hash como MD5 y obtener el hash de todo el Token.

    Editar : Como se ha señalado por Maciej Stępyra MD5 parece estar roto y sus aconseja el uso de una más Fuerte de las funciones de hash como SHA-256.

    Primavera seguridad por defecto le redirigirá a una página de inicio de sesión, pero esto no tiene sentido en el caso del RESTO a fin de utilizar una costumbre AuthenticationEntryPoint en config(Ref ejemplo en github el código).

    Yo estaba usando este formato para mi Token:
    token:username:hash:expiry

    hash=MD5(nombre de usuario+magickey)

    vencimiento=current_timestamp+mins_to_expiry

     <security:http realm="Protected API" use-expressions="true" auto-config="false" create-session="always" entry-point-ref="**CustomAuthenticationEntryPoint**">
            <security:custom-filter ref="**authenticationTokenProcessingFilter**" position="PRE_AUTH_FILTER" />
            <security:intercept-url pattern="/**" access="isAuthenticated()" />
     </security:http>

    PD:Gracias dhavaln para el código. He utilizado esto como una referencia y desarrollado algo similar.

    • Este parece un buen punto de partida. Gracias! Primavera Seguridad internamente mapa el símbolo de una sesión para que usted todavía puede hacer cosas como @Asegurado(valor={«ROLE_ADMIN»})?
    • Sí, usted puede usar, pero no hay necesidad de sesión RESTO debe ser apátridas y configurar create-session="stateless " . En su TokenAuthenticationFilter buscar userdetails y crear una UsernamePasswordAuthenticationToken y uso SecurityContextHolder.getContext().setAuthentication(authentication);
    • ¿Cómo renovar su ficha? Como si se define por lo que caduca después de 15 minutos y que ha sido el envío de solicitudes de los 15 minutos, no se fuerza al usuario a entrar de nuevo?
    • Usted puede lograr esto de varias maneras, por primera auth petición se envió un token de actualización y el tiempo de caducidad para que el cliente-sdk hace una llamada automáticamente con el token de actualización para obtener un nuevo token de acceso cuando el token ha caducado.
    • MD5 es un algoritmo de hash, no cifrado 😉 Mejor uso de algoritmos más fuertes tales SHA256
    • gracias por decírmelo, he actualizado la respuesta.
    • me gusta ur concepto,pero yo no sabía para implementar esto.Por favor me ayudan a implementar esto como por ur concepto.Yo estoy usando el resto de peticiones, así que no hay HttpServlet solicitud,el servicio de respuesta.Necesito esto para mi android de autenticación de la aplicación, que es el mismo, como la autenticación para una aplicación de escritorio.

  2. 1

    «Quiero que la aplicación sea completamente apátridas»

    Me gustaría reconsiderar lo que estamos tratando de hacer. Hay una razón por qué usted no puede encontrar buenos ejemplos de su solución: Usted simplemente no puede tener una aplicación de la que tanto apátridas y seguro. También si usted está almacenando los tokens en algún lugar, no está de ser apátridas. Incluso si usted no es el almacenamiento de las fichas (como el uso de JWT para codificar ellos), usted tiene que proteger contra los ataques CSRF si los usuarios van a acceder a este en un navegador web. Si usted va la ruta, esperar a estar escribiendo un montón de personalizar el código de seguridad (que es una cosa mala). Véase una discusión de esto aquí: https://spring.io/blog/2015/01/12/the-login-page-angular-js-and-spring-security-part-ii

  3. 1

    En mi caso, he encontrado que es más fácil reemplazar el org.springframework.security.web.context.SecurityContextRepository en org.springframework.security.web.context.SecurityContextPersistenceFilter con una aplicación que comparte el SecurityContext entre varios tomcat nodos. El cliente mantiene el envío de un token de jsessionid-pero como puedo hacer un simple equilibrio de carga round robin y no tiene que preocuparse acerca de la sesión de la replicación.

Dejar respuesta

Please enter your comment!
Please enter your name here