#yyds干货盘点#oauth2 授权服务器相关表的作用

Posted 永远不要放纵自我

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#oauth2 授权服务器相关表的作用相关的知识,希望对你有一定的参考价值。

 当我们配置了 jdbc 之后。 就是说配置了把 授权码code、access_token、approval 之后,在做了响应的请求之后,oauth2 框架会记录 一些对应的信息到数据库中去。


具体来说,这些需要存储的信息分别对应:

存储授权码code 的为JwtTokenStore、  

存储用户授权动作信息为 JdbcApprovalStore、

存储access_token、refresh_token 的为JdbcAuthorizationCodeServices 、

存储客户端信息的为 JdbcClientDetailsService、  

存储客户端获取到的token的为 JdbcClientTokenServices、  



oauth_code表

每次 授权码方式访问 成功后, oauth_code 增加一行数据。 授权码使用过一次之后,删除对应的那一行。

不使用会一直保留。。

#yyds干货盘点#oauth2

注意其中:

expires_in 单位是秒。

code 的有效期是?一直, 直到使用,使用一次就被消费,就删除。


oauth_approvals表

每次授权动作后, oauth_approvals 增加一行数据;  注意,需要授权的动作是: 授权码方式访问,第一步的获取授权码code请求,简单/隐式模式 获取token的请求。 只有两个模式需要 授权。

oauth_approvals 只要存在一行, 就不会自动删除。不会再新增一行。

#yyds干货盘点#oauth2

看一下 blob 的内容?发现是二进制的,非常不方便。只能通过程序的工具类来解码。

授权码方式访问的时候,第二步的获取token请求成功之后, oauth_client_token 就会增加一行数据

tokenid 是这个样的: 60aca9a51d9f50e9996c9ae7c8201e85,

token_id 是怎么创建的? 是md5编码后的结果;org.springframework.security.oauth2.provider.token.DefaultAuthenticationKeyGenerator#generateKey 及 extractKey  方法

#yyds干货盘点#oauth2

authorization_id 呢?是

看起来像是一个uuid,

access_token 是怎么来的?org.springframework.security.oauth2.provider.token.DefaultAccessTokenConverter#extractAccessToken 方法

#yyds干货盘点#oauth2


oauth_access_token表

oauth_access_token 它是每次oauth发放access_token 等之后会记录的,非常好观察。



oauth_client_token表

oauth_client_token 搜索半天没有看到其用法,后面发现是JdbcClientTokenServices 被调用,但是打了断点,没有跳进去。找到一篇文章是 https://github.com/spring-projects/spring-security-oauth/issues/194

the role of JdbcClientTokenServices:

the purpose here is for OAuth2 client applications to be able to save tokens that theyve obtained (on behalf of users, primarily) and to look up the right one when needed



oauth_client_details表

oauth_client_details 是客户端消息 ,  

每一次刷新 expires_in 都会减少,只要它大于0,那么返回相同的access_token, 即使授权服务器重启,因为它会从数据库读取,存在则不会重新生成。删除后 刷新请求,会立即重新生成, 此时就会删除旧的那行。。。 小于0 之后 access_token 失效, 会重新生成一个access_token


需要注意的是:

grant_type=client_credentials 返回是不同的 access_token;

grant_type=password 、 response_type=token、grant_type=authorization_code  是相同的! 可能是因为他们都存在 username, 登录过的, 不一样。

对于 grant_type=client_credentials , 不会有 refresh_token 



以上是关于#yyds干货盘点#oauth2 授权服务器相关表的作用的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# springboot整合Oauth2,GateWay实现网关登录授权验证

#yyds干货盘点# 数据结构与算法学习——单链表相关算法

算法 | 第2章 链表相关《程序员面试金典》#yyds干货盘点#

#yyds干货盘点#Windows Server之终端服务安装

微服务架构 | 1. 微服务相关基础知识 #yyds干货盘点#

#yyds干货盘点# Spring嵌套事务是怎么回滚的?