我们知道,auth2的四种模式分别为:
1.ClientCredentialsTokenGranter--客户端模式
2.AuthorizationCodeTokenGranter-- 授权码模式
3.ResourceOwnerPasswordTokenGranter--密码模式
4.RefreshTokenGranter--刷新模式
(还有一个为授权码的简化模式,这里不贴了)
这些模式的配置在spring 里面是写死的,但是我们需要增加授权模式,比如手机验证吗登录授权怎么办呢?下面一起探讨下,如何实现自定义授权模式。
我们先看一个授权接口类:TokenGranter
默认的实现类有:
其中有一个的类,CompositeTokenGranter
内置了自定义授权模式的方法入口,但是好像没有找到直接可以调用这个的方法的途径,不过这个类真正被用到的地方在 AuthorizationServerEndpointsConfigurer里面
这个加载默认授权模式的方法如下:
所以,启动的时候,并没有加载授权模式,当接口类的grant 方法被调用的时候,(首次)才回去创建 CompositeTokenGranter 并且加载默认授权模式,而CompositeTokenGranter这个实现类的grant方法和其他不一样,这个里面是循环遍历调用对应的grant—type类型符合的grant方法的实现类。(箭头所指的就是 密码模式下,需要 配置AuthenticationManager bean --->不然无法调用 authenticate方法进行用户校验授权)
讲到这里或许大家有思路了,没有思路也没有关系,下面接着讲!
*****************************************************************分割线*****************************************************************************************
我们知道,实现auth2最基本的两个步骤,
1.加注解@EnableAuthorizationServer 并且 extends AuthorizationServerConfigurerAdapter
2.@EnableWebSecurity 并且 extends WebSecurityConfigurerAdapter
话不多说,直接看 AuthorizationServerConfigurerAdapter,
重写public void configure(AuthorizationServerEndpointsConfigurer endpoints) 方法,
贴上我的代码: