spring-oauth-server/others/db_table_description_3.0.0....

340 lines
15 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>数据库表说明(oauth.ddl)</title>
<link href="https://cdn.bootcss.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>
</head>
<body>
<div class="container-fluid">
<h2>spring-oauth-server 数据库表说明
<small class="badge" title="Version">v3.0.0</small>
</h2>
<p class="text-muted">以下对<a target="_blank"
href="https://gitee.com/shengzhao/spring-oauth-server">spring-oauth-server</a>项目中的
<code>oauth.ddl</code> <code>initial_db.ddl</code>文件(位于/others/database目录)中的表字及段进行说明,
内容包括字段说明与使用场景等</p>
<table class="table table-bordered table-hover">
<thead>
<tr>
<th style="width:10%;">表名</th>
<th style="width: 10%">字段名</th>
<th>字段类型</th>
<th>字段说明</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="17">oauth2_registered_client</td>
<td>id</td>
<td>varchar</td>
<td>主键,系统自动生成</td>
</tr>
<tr>
<td>archived</td>
<td>tinyint</td>
<td>
用于标识客户端是否已存档(即实现逻辑删除),默认值为'0'(即未存档).
<br/>
对该字段的具体使用请参考<code>CustomJdbcClientDetailsService.java</code>,在该类中,扩展了在查询client_details的SQL加上<em>archived
= 0</em>条件 (扩展字段)
</td>
</tr>
<tr>
<td>create_time</td>
<td>datetime</td>
<td>数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)</td>
</tr>
<tr>
<td>updated_time</td>
<td>timestamp</td>
<td>数据的最后更新时间,由数据库自行更新维护</td>
</tr>
<tr>
<td>client_id</td>
<td>varchar</td>
<td>
唯一,不能为空.
<br/>
用于唯一标识每一个客户端(client); 在注册时必须填写(也可由服务端自动生成).
<br/>
对于不同的grant_type,该字段都是必须的. 在实际应用中的另一个名称叫appKey,与client_id是同一个概念.
</td>
</tr>
<tr>
<td>client_id_issued_at</td>
<td>timestamp</td>
<td>client_id的签发时间, 默认为数据创建时间</td>
</tr>
<tr>
<td>client_secret</td>
<td>
用于指定客户端(client)的访问密匙; 在注册时必须填写(也可由服务端自动生成),加密保存.
<br/>
对于不同的grant_type,该字段都是必须的. 在实际应用中的另一个名称叫appSecret,与client_secret是同一个概念.
</td>
</tr>
<tr>
<td>client_secret_expires_at</td>
<td>datetime</td>
<td>client_secret的过期时间,null表示永不过期</td>
</tr>
<tr>
<td>client_name</td>
<td>varchar</td>
<td>客户端(client)的名称,一般是一个有业务意义的名称</td>
</tr>
<tr>
<td>client_authentication_methods</td>
<td>varchar</td>
<td>认证支持的方式,多个由逗号分隔; 如: client_secret_basic,client_secret_post; 一般指认证时传递client_secret支持哪些方式</td>
</tr>
<tr>
<td>authorization_grant_types</td>
<td>varchar</td>
<td>
指定客户端支持的grant_type,可选值包括<em>authorization_code</em>,<em>urn:ietf:params:oauth:grant-type:device_code</em>,<em>refresh_token</em>,
<em>urn:ietf:params:oauth:grant-type:jwt-bearer</em>,<em>client_credentials</em>,
若支持多个grant_type用逗号(,)分隔,如: "authorization_code,refresh_token".
<br/>
在实际应用中,当注册时,该字段是一般由服务器端指定的,而不是由申请者去选择的,最常用的grant_type组合有:
"authorization_code,refresh_token"(针对通过浏览器访问的客户端);
"client_credentials"(针对另一个服务端的场景,不需要用户参与).
<br/>
<em>urn:ietf:params:oauth:grant-type:device_code</em><em>urn:ietf:params:oauth:grant-type:jwt-bearer</em>是OAuth2.1中新增.
</td>
</tr>
<tr>
<td>redirect_uris</td>
<td>varchar</td>
<td>
OAuth2 认证后回调uri 一般传递code, 多个由逗号分隔;
可为空, 当grant_type为<code>authorization_code</code>时,
在OAuth的流程中会使用并检查与注册时填写的redirect_uri是否一致. 下面分别说明:
<ul>
<li>
当grant_type=<code>authorization_code</code>时, 第一步 <code>从 spring-oauth-server获取
'code'</code>时客户端发起请求时必须有<code>redirect_uri</code>参数, 该参数的值必须与
<code>web_server_redirect_uri</code>的值一致. 第二步 <code>用 'code' 换取 'access_token'</code>
时客户也必须传递相同的<code>redirect_uri</code>.
<br/>
在实际应用中, <em>redirect_uris</em>在注册时是必须填写的, 一般用来处理服务器返回的<code>code</code>,
验证<code>state</code>是否合法与通过<code>code</code>去换取<code>access_token</code>值.
<br/>
<a href="https://gitee.com/mkk/spring-oauth-client">spring-oauth-client</a>项目中,
可具体参考<code>AuthorizationCodeController.java</code>中的<code>authorizationCodeCallback</code>方法.
</li>
</ul>
</td>
</tr>
<tr>
<td>post_logout_redirect_uris</td>
<td>varchar</td>
<td> OAuth2 退出时 post 的客户端重定向 uri; 可选 多个由逗号分隔, 一般在client注册时可填写</td>
</tr>
<tr>
<td>scopes</td>
<td>varchar</td>
<td>
指定客户端申请的权限范围,可选值在OIDC协议中定义,
包括<em>openid</em>,<em>profile</em>,<em>email</em>,<em>address</em>,<em>phone</em>;若有多个值用逗号(,)分隔,如: "openid,email".
<br/>
openid是必须有的,其他值若有则在获取的<code>id_token</code>中会包含对应的值.
<br/>
在实际应该中, 该值一般由服务端指定, 常用的值为<em>openid</em>.
</td>
</tr>
<tr>
<td>client_settings</td>
<td>varchar</td>
<td>
客户端的各类设置, 如是否支持PKCE用户授权(consent)确认是否必须等; 详见代码<code>ClientSettings.java</code>;
此字段存储JSON格式的数据值.
</td>
</tr>
<tr>
<td>token_settings</td>
<td>varchar</td>
<td>
对token的各类设置; 如 token有效期, refresh_token有效期等; 详见代码<code>TokenSettings.java</code>;
此字段存储JSON格式的数据值.
</td>
</tr>
<tr>
<td colspan="3">
<p class="text-info">
<em class="glyphicon glyphicon-info-sign"></em> 在项目中,主要操作<code>oauth2_registered_client</code>表的类是<code>ClientDetailsController.java</code>,
<code>OauthClientDetails.java</code>更多的细节请参考该类; 也可以根据实际的需要,去扩展或修改该类的实现.
</p>
</td>
</tr>
<!-- oauth2_authorization -->
<tr>
<td rowspan="7">oauth2_authorization</td>
<td>create_time</td>
<td>数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)</td>
</tr>
<tr>
<td>token_id</td>
<td>
从服务器端获取到的<code>access_token</code>的值.
</td>
</tr>
<tr>
<td>token</td>
<td>
这是一个二进制的字段, 存储的数据是<code>OAuth2AccessToken.java</code>对象序列化后的二进制数据.
</td>
</tr>
<tr>
<td>authentication_id</td>
<td>
该字段具有唯一性, 是根据当前的username(如果有),client_id与scope通过MD5加密生成的.
<br/>
具体实现请参考<code>DefaultClientKeyGenerator.java</code>类.
</td>
</tr>
<tr>
<td>user_name</td>
<td>登录时的用户名</td>
</tr>
<tr>
<td>client_id</td>
<td></td>
</tr>
<tr>
<td colspan="2">
<p class="text-info">
<em class="glyphicon glyphicon-info-sign"></em> 该表用于在客户端系统中存储从服务端获取的token数据,
<a href="http://git.oschina.net/shengzhao/spring-oauth-server">spring-oauth-server</a>项目中未使用到.
<br/>
<code>oauth_client_token</code>表的主要操作在<code>JdbcClientTokenServices.java</code>类中, 更多的细节请参考该类.
</p>
</td>
</tr>
<!-- oauth_access_token -->
<tr>
<td rowspan="9">oauth_access_token</td>
<td>create_time</td>
<td>数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)</td>
</tr>
<tr>
<td>token_id</td>
<td>
该字段的值是将<code>access_token</code>的值通过MD5加密后存储的.
</td>
</tr>
<tr>
<td>token</td>
<td>
存储将<code>OAuth2AccessToken.java</code>对象序列化后的二进制数据, 是真实的AccessToken的数据值.
</td>
</tr>
<tr>
<td>authentication_id</td>
<td>
该字段具有唯一性, 其值是根据当前的username(如果有),client_id与scope通过MD5加密生成的.
具体实现请参考<code>DefaultAuthenticationKeyGenerator.java</code>类.
</td>
</tr>
<tr>
<td>user_name</td>
<td>登录时的用户名, 若客户端没有用户名(如grant_type="client_credentials"),则该值等于client_id</td>
</tr>
<tr>
<td>client_id</td>
<td></td>
</tr>
<tr>
<td>authentication</td>
<td>
存储将<code>OAuth2Authentication.java</code>对象序列化后的二进制数据.
</td>
</tr>
<tr>
<td>refresh_token</td>
<td>
该字段的值是将<code>refresh_token</code>的值通过MD5加密后存储的.
</td>
</tr>
<tr>
<td colspan="2">
<p class="text-info">
<em class="glyphicon glyphicon-info-sign"></em> 在项目中,主要操作<code>oauth_access_token</code>表的对象是<code>JdbcTokenStore.java</code>.
更多的细节请参考该类.
</p>
</td>
</tr>
<!-- oauth_refresh_token -->
<tr>
<td rowspan="5">oauth_refresh_token</td>
<td>create_time</td>
<td>数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)</td>
</tr>
<tr>
<td>token_id</td>
<td>
该字段的值是将<code>refresh_token</code>的值通过MD5加密后存储的.
</td>
</tr>
<tr>
<td>token</td>
<td>
存储将<code>OAuth2RefreshToken.java</code>对象序列化后的二进制数据.
</td>
</tr>
<tr>
<td>authentication</td>
<td>
存储将<code>OAuth2Authentication.java</code>对象序列化后的二进制数据.
</td>
</tr>
<tr>
<td colspan="2">
<p class="text-info">
<em class="glyphicon glyphicon-info-sign"></em> 在项目中,主要操作<code>oauth_refresh_token</code>表的对象是<code>JdbcTokenStore.java</code>.
(与操作<code>oauth_access_token</code>表的对象一样);更多的细节请参考该类.
<br/>
如果客户端的grant_type不支持<code>refresh_token</code>,则不会使用该表.
</p>
</td>
</tr>
<!-- oauth_code -->
<tr>
<td rowspan="4">oauth_code</td>
<td>create_time</td>
<td>数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)</td>
</tr>
<tr>
<td>code</td>
<td>
存储服务端系统生成的<code>code</code>的值(未加密).
</td>
</tr>
<tr>
<td>authentication</td>
<td>
存储将<code>AuthorizationRequestHolder.java</code>对象序列化后的二进制数据.
</td>
</tr>
<tr>
<td colspan="2">
<p class="text-info">
<em class="glyphicon glyphicon-info-sign"></em> 在项目中,主要操作<code>oauth_code</code>表的对象是<code>JdbcAuthorizationCodeServices.java</code>.
更多的细节请参考该类.
<br/>
只有当grant_type为"authorization_code"时,该表中才会有数据产生; 其他的grant_type没有使用该表.
</p>
</td>
</tr>
</tbody>
</table>
<p class="text-muted">
&copy; 2013 - 2023 <a href="https://gitee.com/shengzhao/spring-oauth-server" target="_blank">spring-oauth-server</a>
</p>
</div>
</body>
</html>