secure - Cómo asegurar un servicio web RESTful de Spring para Angular.js o Ember.js
spring security jwt (1)
Ciertamente, no es cierto que Spring Security nunca haya sido o no pueda usarse en aplicaciones AJAX. Tengo dos aplicaciones en producción que usan Spring Security y AJAX y más aplicaciones en desarrollo con la misma combinación.
Si vas a utilizar EmberJS o AngularJS en una aplicación web existente con Spring Security funcionando, no deberías enfrentar demasiados problemas si simplemente agregas la biblioteca de JavaScript a tu proyecto. Esto se debe a que una vez que los usuarios se autentican, cualquier solicitud HTTP normal se tratará como autenticada también, ya que el navegador garantizará que la información de la sesión se transfiera utilizando cookies o parámetros de URL, según corresponda. Puede ver uno de mis ejemplos de trabajo en Github para la integración de Spring Security y EmberJS.
Lo único que debe preocuparse es los tokens de CSRF para envíos de formularios usando AJAX. La última documentación de Spring Security tiene una pequeña sección dedicada a esto, por lo que no debería enfrentar demasiados problemas para que funcione. Sin embargo, me gustaría aclarar que este problema en particular no es específico de Spring Security. La protección CSRF normalmente incluye incluir un token seguro generado aleatoriamente con cada solicitud HTTP POST. El desafío surge al hacer que las bibliotecas JavaScript existentes conozcan este token y cómo se debe incluir en las solicitudes HTTP POST. Esto sería un desafío en cualquier aplicación, no solo para aquellos que usan Spring Security.
Sin embargo, si trabaja con clientes sin estado, como dispositivos móviles, no podrá confiar en el mecanismo predeterminado de Spring Security para almacenar las credenciales del usuario en la sesión HTTP porque las solicitudes HTTP no tendrán información para vincularlas a una sesión. De nuevo, esto no es específico de una aplicación Spring o Spring Security porque la restricción es impuesta por la naturaleza del cliente y la comunicación cliente-servidor en lugar de por cualquier tecnología del lado del servidor. En tales circunstancias, deberá pasar un token de autenticación en los encabezados HTTP para que la aplicación mantenga el estado de seguridad en el lado del servidor. Tengo un ejemplo de trabajo para esto también . Si necesita más detalles, hay artículos en la web que explican cómo hacer algo como esto con Spring Security.
Tengo una aplicación Spring MVC que usa Spring Security para manejar la autenticación de inicio de sesión de usuario, que funciona bien.
Ahora quiero agregar algunos códigos Ember.js y Angular.js a las páginas HTML que acceden a los servicios web Spring RESTful (que simplemente devuelven datos JSON).
¿Cómo puedo vincular la autenticación de inicio de sesión de usuario a la autenticación para los servicios web RESTful? En otras palabras, quiero que los servicios web RESTful solo puedan accederse una vez que el usuario haya iniciado sesión. De esta forma, las bibliotecas Angular.js y Ember.js pueden acceder a estos servicios web RESTful de forma segura solo desde mis páginas de usuario sin que nadie más pueda llamarlos directamente.
Leí en otra publicación que Spring Security nunca tuvo la intención de ser utilizada con un marco Ajax completo, ¿es cierto? Espero que este no sea el caso. Me imagino que este tipo de cosas debe ser bastante común ahora, ya que hay muchos frameworks del lado del cliente AJAX que funcionan basados en el acceso a una API JSON / RESTful.