自定义/oauth/token获取token运行流程
(1)、首先去请求 TokenEndpoint 类的postAccessToken或者getAccessToken方法,就相当于一个普通的concoller请求方法(根据请求类型是get或者post,其实get请求内部也是调用post请求的方法),这个方法会在132行调用TokenGranter类的grant方法来获取token,这个方法也是最重要的,通过这个方法我们可以对请求的参数进行校验是否合法,是否给予令牌。


(2),我们可以继承TokenGranter来实现自定义的身份验证以便获取token,而AbstractTokenGranter是一个继承TokenGranter的实现类,一般我们都会继承这个类进行使用。
从下面代码可以看出,这个抽象类的grant方法最后调用了getOAuth2Authentication方法,所以
我们只需要继承AbstractTokenGranter类然后重写getOAuth2Authentication方法就可以。

而spring security oauth2自带已经实现了5类客户端的授权模式,我们也可以直接继承这些实现类进行getOAuth2Authentication方法重写来实现自定义获取token。
AuthorizationCodeTokenGranter:authorization_code
ResourceOwnerPasswordTokenGranter:password
ClientCredentialsTokenGranter :client_credentials
ImplicitTokenGranter:implicit
RefreshTokenGranter:refresh_token
(3),开始继承AbstractTokenGranter重写getOAuth2Authentication方法,
一般我们会在这里根据传入的自定义参数进行判断,校验参数合法,具体代码参照spring security oauth2实现的五种客户端授权模式类。
(4),一般项目都会自定义好几种授权模式,邮箱验证码、手机验证码等等。
我们实现了自定义的token获取,会进行配置。
我的项目是继承 TokenGranter接口,重写grant方法,用集合把自定义的授权模式类使用集合全部放到这个类中,然后根据授权码的不同使用不同的类进行处理,找不到处理或者超速不合法则返回NULL。
(5),配置文件类,配置oauth2授权服务器方便策略
添加@EnableAuthorizationServer(授权服务器标注)和@Configuration注解,
继承AuthorizationServerConfigurerAdapter类,实现其三个方法,具体怎么写,看代码....会把代码上传。
(6),剩下的添加一些过滤路径之类的注解,网上有许多,可以自行百度。
-------------------
总结,说了那么多,其实就是3,4,5步骤需要自己写,自定义获取token类,整理多个自定义获取token类,配置文件类。
(7),示例代码。
注:
1、配置oauth2授权服务器方便策略,配置。
AuthorizationServerConfigurer类
2,访问令牌granters接口。规范中定义了各种赠款类型,每个类型都有实现,为需要扩展到规范的空间。/oauth/token接口扩展??
TokenGranter接口,实现下面的方法
OAuth2AccessToken grant(String grantType, TokenRequest tokenRequest);
或者AbstractTokenGranter 抽象类,实现下面的方法,这个抽象方法也继承自TokenGranter接口
OAuth2Authentication getOAuth2Authentication();
3、 oauth2资源服务器方便的标注,使弹簧安全过滤,通过认证的要求,添加一些过滤路径之类的,目前这样理解的..
@EnableResourceServer
一般和接口配合使用 ResourceServerConfigurer
配置器接口类,添加@ enableresourceserver注解。实现此接口来调整访问权限规则,
由oauth2安全保护路径。应用程序可以提供此接口的多个实例,和一般的(如与其他安全configurers),如果有多个配置相同的属性,那么最后配置的生效。