自定义OAuth的grant type

自定义OAuth的grant type

admin 1,048 2022-01-22

验证流程

  • TokenEndPoint:可以处理GET,POST的 /oauth/token 的认证请求,初步校验client id,并找到这个client id支持的grant type类型

  • TokenGrantBuilder:用户添加自定义grant type时需要继承的类,用户需要继承此类来增加自定义的grant type,并注入到spring容器中

上面是前置工作,下面开始正式新增自己的grant

1.定义自己的token,并继承AbstractAuthenticationToken类 重写 getCredentials(),getPrincipal(),setAuthentication()方法

2.定义自己的tokenGranter(token生成器),并继承AbstractTokenGranter类,重写 getOAuth2Authentication()方法,在这个类中需要定义常量 GRANT_TYPE,没错你可以把自定义的grant type名写在这里

3.定义自己的Provider(token的验证方法,对前端传来的数据,如何校验就在这里) 继承 AuthenticationProvider接口,实现 authentication(),supports()方法

4.在数据库的oauth_client_detalis中向相应的client id添加自定义的grant type

-------------- 3者关系 ---------------
token 定义了包含的内容,比如通过构造函数可以选择如何为 credentials/principal 属性赋值

tokenGranter 定义了何如处理 request请求进来的参数,设定grant type的值,向AuthenticationManager请求认证(认证会调用你写的Provider),根据结果决定是否生成token

Provider 定义了何如进行认证,比如你可以去数据库查询数据,与传入的做对比/调用第三方登陆接口 根据返回结果决定等…


# OAuth2.0 # Java # Spring