公司项目里用到了 Spring Security OAuth2, 前后端分离的情况下 Session 是无效的,所以认证方式的最佳选择是 Token 式的认证。

对于原本前后端不分离的情况,服务端保存 Session,客户端(浏览器)存储 SessionId,请求接口时携带此 SessionId,后端服务会在内存中寻找 SessionId 对应的 Session 对象以验证用户身份,这即为服务端有状态。而 Token 式的认证将服务端的状态去除,不依赖于服务本身的内存空间——在用户登录时颁发一串 Token,并将用户身份、权限信息放入缓存( Redis 等基于内存的非关系型数据库),之后前端的请求会主动携带此 Token(一般放在请求头中),后端解析此请求头,利用缓存来判断用户状态或者提取用户信息。所以, Token 式的这种认证,也完全不是所谓的服务端无状态,而是将状态放进了缓存。

学习 Spring Security OAuth2 之前,需要了解:

  • Spring IOC/DI
  • 常见设计模式:代理模式、委托者模式、装饰者模式
  • 简单的链式编程