我们正在开发应用程序,我的朋友在服务器端(spring)工作,他创建了REST api,而我正在使用angularJS创建客户端。REST和客户端网页在不同的域上,所以我不得不面对Same-origin policy -我用php代理来处理这个问题,一切都运行得很好。直到昨天--现在我们有了认证服务(spring-security),而我不知道如何登录到REST。当我简单地将服务地址写入浏览器时,我可以登录,但是当我从JS调用时,我无法获得所需的响应。
当我发送简单的get请求时,作为响应,我得到了带有登录页面的HTML代码。我把<form>放到我的页面上登录(取自响应,所以它与'/ login‘页面完全相同,我只是添加了完整的操作地址),但在发送数据后,我得到了错误页面,并显示以下消息:
HTTP Status 403 - Invalid CSRF Token 'blah-blah-many-numbers-and-letters' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.我没有改变这个CSRF令牌,所以我可能不知道正确的方法来处理这个问题(现在它在表单中以POST参数的形式发送- _csrf是由服务器给出的带有value属性的隐藏输入)。
所以在这篇冗长的介绍之后,我的问题是:如何从angularJS控制器登录到REST服务(通过spring-security)?我这样做的方式出了什么问题?(一定是出了什么问题,因为它不工作;)。
(为我的英语错误道歉,恐怕有很多错误)
发布于 2015-06-16 15:25:55
Angular内置了对CSRF支持,但它对CSRF令牌使用了另一个名称。
如果您已经在spring webservice中拥有CSRF令牌库,那么您需要做的就是将CSRF令牌头名称更改为XSRF-TOKEN。
你会在https://spring.io/blog/2015/01/12/the-login-page-angular-js-and-spring-security-part-ii上找到如何解决你的问题的完整说明。
发布于 2015-06-16 18:05:15
您可以使用无状态身份验证,使用服务器签名的token i.e.JSON web token(JWT)来保护REST API,并使用angularjs来实现客户端。
请找到下面的链接作为实现相同内容的参考:http://blog.jdriven.com/2014/10/stateless-spring-security-part-1-stateless-csrf-protection/
Github:https://github.com/Robbert1/boot-stateless-auth
当您登录到Rest API.The博客时,您需要具有类AbstractAuthenticationProcessingFilter的自定义实现,以避免html响应,github参考资料将指导您实现相同的实现。
https://stackoverflow.com/questions/30861239
复制相似问题