auth2 自定义授权模式

 我们知道,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) 方法,

贴上我的代码:

第一次配置

第二次尝试,这个是错误的,因为 CompositeTokenGranter  在这个时候还没被赋值,故无法调用到addTokenGranter


终于成功了

备注:不会仿照ResourceOwnerPasswordTokenGranter 的 请留言:

你可能感兴趣的:(auth2 自定义授权模式)