spring security Oauth开发APP认证2
1、OAuth协议标准流程:

绿色表示spring oauth已经帮我们实现了,只需要2个注解就可以实现认证服务器和资源服务器,橘黄色的需要我们自己实现。
Oauth2AuthenticationProcessingFilter:
被添加到springSecurity过滤器链上,从请求中拿出token,然后根据配置的存储策略,拿出用户信息,判断用户信息是否存在,是否有权限等等判断来决定能否访问资源。
1)、对于前后端分离的项目来说,我们后台系统相当于服务端,充当认证服务器和资源服务器。
Oauth协议中的授权码模式,对于认证服务器需要提供2个地址给第三方:让用户跳过来点授权的地址、点完授权后回到客户端,客户端拿着授权码换AccessToken的地址。
默认分别是:/oauth/authorize 和 /oauth/token
2)、默认情况下,认证服务器需要 ROLE_USER 角色才能访问。
3)、同一个用户,在有效期内多次获取token是一样的。
4)、通过以上获取的token就可以访问后端资源,在请求头加上:Authorization:bearer access_token
5)、以上是spring oauth默认的流程,但是存在问题:
a)只有标准的4种授权模式,怎么将我们用户名密码登录、短信验证码登录、社交登录这3种方式嫁接到标准的体系去,让这3种模式登录成功后也返回token。
b)access_token默认是存在内存中的,重启就失效。
2、跟踪spring security oauth源码:

绿色表示实体类,蓝色表示接口,括号为实现类。
ClientDetailsService:用来读取第三方应用的信息。
clientDetails:封装了第三方应用的信息。
TokenRequest:封装了请求的其它信息
tokenGranter:封装了4种授权模式和刷新令牌模式,根据授权类型确定令牌生成器。
OAuth2Authentication:封装了哪个三方应用在请求哪个用户授权,授权模式是什么,请求的参数是什么。
TokenStore:令牌的存取。
TokenEnhancer:令牌的增强器。
3、核心代码:
1)不同的授权模式会有不同的tokenGranter来处理,例如密码模式,产生OAuth2Authentication代码中,会根据之前用户名密码的认证逻辑去生成一个经过认证了的Authentication,

2)token的存储,会将已经经过认证了的Authentication和产生的accessToken进行关联,存储到内存或者redis中,供后面资源服务器使用。

4、获取token流程:
2)密码模式:

3)刷新令牌:

返回token格式:同一用户反复获取access_oken时,会判断当前用户是否发过access_oken,如果发过就会把之前没过期的access_oken发给用户。

浙公网安备 33010602011771号