Spring Security从表单验证到token验证

2 3月

对于任何需要认证的系统,Spring Security无疑是一个很好的选择。

无论是从认证本身,还是权限控制,Spring Security都有极好的支持。

Form登录是一种极为常见的方式,用户输入用户名和密码,post登录信息,认证之后登录信息保存在session之中。

但是随着架构演进,前后端逐渐分离,之前的大部分逻辑都变成了API供前端调用,而Form登录逐渐成为累赘,调试上的困难。这个时候就可以考虑换为token模式,进而将后端API stateless化。

Token的生成和解析

第一步是选择token的生成和解析,我们来个简单的,token中只包含加密后的用户名,具体生成才是JWT的HS512加密。

先配置一个登录成功后的响应AuthSuccessHandler

配置中添加一句

这样登录成功后会返回类似这样的json

Token认证

现在我们有了token,任何消费API的请求都需要在header中包含这个token,然后再根据这个token给予用户的请求完成认证,Spring Security的Pre-Auth就是合适的方案。

当我们获取token以后直接解码获得用户名,并给予当前访问认证。

这个一个Filter,它的位置位于UsernamePasswordAuthenticationFilter之前,在配置中直接配置

这样就完成了token的认证,只要请求包含有效的token,那么就能访问授权后的资源。

其他

这只是一个简单的例子,token的生成方式非常脆弱,也没有过期超时等等的验证。Spring Security还有oauth模块,可以使用其中的tokenStore等等去完善。

发表评论

电子邮件地址不会被公开。