Spring Cloud OAuth2 # Access Token中继流程
来源:互联网 发布:网络储存空间 编辑:程序博客网 时间:2024/06/05 11:16
OAuth2RestTemplate
OAuth2ClientContext
AccessTokenRequest
OAuth2AccessTokenSupport
AccessTokenProvider
AccessTokenProviderChain
AuthorizationCodeAccessTokenProvider
ClientCredentialsAccessTokenProvider
ImplicitAccessTokenProvider
ResourceOwnerPasswordAccessTokenProvider
OAuth2ProtectedResourceDetails:当前ResourceServer要保护的资源的信息,也就是security.oauth2.client里面的内容;
AuthorizationCodeResourceDetails
ImplicitResourceDetails
ClientCredentialsResourceDetails:只有这个client_only为true
ResourceOwnerPasswordResourceDetails
ClientTokenServices:用来管理中继时候的调用方的token的
JdbcClientTokenServices:oauth_client_token操作这个数据库表,每个需要中继的节点都需要建立这个表
表结构:oauth_client_token (token_id, token, authentication_id, user_name, client_id)
token_id:accessToken.getValue()
token:SerializationUtils.serialize(accessToken)
authentication_id:md5(authentication#username+resource#clientid+resource#scope)
user_name:authentication#username
client_id:resource#clientid
authentication_id是领域标识,单查和删除都是根据这个字段;
ClientAuthenticationHandler:验证client账户
RequestEnhancer:
- 以OAuth2FeignRequestInterceptor为例
- 发起请求时,尝试获取access_token,放到请求的header中
- 拿到当前OAuth2ClientContext中的OAuth2AccessToken对象,拿到了就放到Header中
- 如果拿不到或者拿到了一个过期的OAuth2AccessToken对象,则尝试重新获取一个新的access_token
- 重新获取AccessToken的处理流程是AccessTokenProvider的一个特殊的实现AccessTokenProviderChain来处理的,这个AccessTokenProviderChain可以包含多个AccessTokenProvider对象;每一个需要获取OAuth2AccessToken的地方,最方便的方法就是持有如下的变量
private AccessTokenProvider accessTokenProvider = new AccessTokenProviderChain(Arrays .<AccessTokenProvider> asList(new AuthorizationCodeAccessTokenProvider(), new ImplicitAccessTokenProvider(), new ResourceOwnerPasswordAccessTokenProvider(), new ClientCredentialsAccessTokenProvider()));
然后在想要获取OAuth2AccessToken的地方直接调用其obtainAccessToken方法即可
OAuth2AccessToken obtainableAccessToken; obtainableAccessToken = accessTokenProvider.obtainAccessToken(resource, tokenRequest);
- AccessTokenProviderChain#obtainAccessToken的处理过程如下,
- 如果当前SecurityContextHolder中的Authentication对象是个AnonymousAuthenticationToken的话,抛出异常,获取access_token的流程终止;
- 如果将要请求的资源是
- Spring Cloud OAuth2 # Access Token中继流程
- Spring Cloud OAuth2 认证流程
- springboot-Spring Cloud Security- Spring Cloud OAuth2 -token-redis 接口权限01
- Spring Cloud OAuth2 & Zuul
- Spring cloud oauth2.0学习总结
- Spring cloud oauth2 研究第N天
- spring cloud oauth2 feign 遇到的坑
- 几张图了解Spring oauth2流程
- 如何获取OAuth2.0 Access Token(新浪微博)
- OAuth2.0使用access Token时要注意的地方
- 新浪微博Oauth2.0授权 获取Access Token
- 新浪微博Oauth2.0授权 获取Access Token
- Spring Cloud之Feign调用token丢失
- Spring 使用 Oauth2的第三方对接和token
- 为什么OAuth2里面在获取access token之前一定要先获取code,然后再用code去获取access token?
- 使用Spring Cloud Security OAuth2搭建授权服务
- 使用Spring Cloud Security OAuth2搭建授权服务
- 利用curl模拟 移动端 接入 spring cloud security OAuth2
- 4路/8路模拟CVBS摄像头TW6865/TW6869 i.MX6四核工业级Android、Linux、STM32、NXP
- python去除文本多余空格
- CentOS环境Eclipse安装SVN插件几大常见问题
- 第十七篇 JS验证form表单
- FTPrep, 70 Climbing Stairs
- Spring Cloud OAuth2 # Access Token中继流程
- Javascript:谈谈JS的全局变量跟局部变量
- Android界面性能优化最全总结、原理剖析
- 集群和分布式的理解
- JavaScript_Bom、Dom
- Vue的路由功能(1)简单路由与vue-router的基础使用(同步/异步组件)
- Altium Designer 的ActiveRoute使用
- 【PDF下载】阿里研发峰会之菜鸟技术双11项目管理
- HDU 6203 ping ping ping