表名 字段名 字段说明
oauth_client_details client_id 主键,必须唯一,不能为空.
用于唯一标识每一个客户端(client); 在注册时必须填写(也可由服务端自动生成).
对于不同的grant_type,该字段都是必须的. 在实际应用中的另一个名称叫appKey,与client_id是同一个概念.
resource_ids 客户端所能访问的资源id集合,多个资源时用逗号(,)分隔,如: "unity-resource,mobile-resource".
该字段的值必须来源于与security.xml中标签‹oauth2:resource-server的属性resource-id值一致. 在security.xml配置有几个‹oauth2:resource-server标签, 则该字段可以使用几个该值.
在实际应用中, 我们一般将资源进行分类,并分别配置对应的‹oauth2:resource-server,如订单资源配置一个‹oauth2:resource-server, 用户资源又配置一个‹oauth2:resource-server. 当注册客户端时,根据实际需要可选择资源id,也可根据不同的注册流程,赋予对应的资源id.
client_secret 用于指定客户端(client)的访问密匙; 在注册时必须填写(也可由服务端自动生成).
对于不同的grant_type,该字段都是必须的. 在实际应用中的另一个名称叫appSecret,与client_secret是同一个概念.
scope 指定客户端申请的权限范围,可选值包括read,write,trust;若有多个权限范围用逗号(,)分隔,如: "read,write".
scope的值与security.xml中配置的‹intercept-urlaccess属性有关系. 如‹intercept-url的配置为

‹intercept-url pattern="/m/**" access="ROLE_MOBILE,SCOPE_READ"/>

则说明访问该URL时的客户端必须有read权限范围. write的配置值为SCOPE_WRITEtrust的配置值为SCOPE_TRUST.
在实际应该中, 该值一般由服务端指定, 常用的值为read,write.

authorized_grant_types 指定客户端支持的grant_type,可选值包括authorization_code,password,refresh_token,implicit,client_credentials, 若支持多个grant_type用逗号(,)分隔,如: "authorization_code,password".
在实际应用中,当注册时,该字段是一般由服务器端指定的,而不是由申请者去选择的,最常用的grant_type组合有: "authorization_code,refresh_token"(针对通过浏览器访问的客户端); "password,refresh_token"(针对移动设备的客户端).
implicitclient_credentials在实际中很少使用.
web_server_redirect_uri 客户端的重定向URI,可为空, 当grant_type为authorization_codeimplicit时, 在Oauth的流程中会使用并检查与注册时填写的redirect_uri是否一致. 下面分别说明:

  • 当grant_type=authorization_code时, 第一步 从 spring-oauth-server获取 'code'时客户端发起请求时必须有redirect_uri参数, 该参数的值必须与 web_server_redirect_uri的值一致. 第二步 用 'code' 换取 'access_token' 时客户也必须传递相同的redirect_uri.
    在实际应用中, web_server_redirect_uri在注册时是必须填写的, 一般用来处理服务器返回的code, 验证state是否合法与通过code去换取access_token值.
    在spring-oauth-client项目中, 可具体参考AuthorizationCodeController.java中的authorizationCodeCallback方法.
  • 当grant_type=implicit时通过redirect_uri的hash值来传递access_token值.如:
    http://localhost:7777/spring-oauth-client/implicit#access_token=dc891f4a-ac88-4ba6-8224-a2497e013865&token_type=bearer&expires_in=43199

    然后客户端通过JS等从hash值中取到access_token值.

authorities 指定客户端所拥有的Spring Security的权限值,可选, 若有多个权限值,用逗号(,)分隔, 如: "ROLE_UNITY,ROLE_USER".
对于是否要设置该字段的值,要根据不同的grant_type来判断, 若客户端在Oauth流程中需要用户的用户名(username)与密码(password)的(authorization_code,password),
则该字段可以不需要设置值,因为服务端将根据用户在服务端所拥有的权限来判断是否有权限访问对应的API.
但如果客户端在Oauth流程中不需要用户信息的(implicit,client_credentials),
则该字段必须要设置对应的权限值, 因为服务端将根据该字段值的权限来判断是否有权限访问对应的API.

(请在spring-oauth-client项目中来测试不同grant_type时authorities的变化)

access_token_validity 设定客户端的access_token的有效时间值(单位:秒),可选, 若不设定值则使用默认的有效时间值(60 * 60 * 12, 12小时).
在服务端获取的access_token JSON数据中的expires_in字段的值即为当前access_token的有效时间值.
在项目中, 可具体参考DefaultTokenServices.java中属性accessTokenValiditySeconds.
在实际应用中, 该值一般是由服务端处理的, 不需要客户端自定义.
refresh_token_validity 设定客户端的refresh_token的有效时间值(单位:秒),可选, 若不设定值则使用默认的有效时间值(60 * 60 * 24 * 30, 30天).
若客户端的grant_type不包括refresh_token,则不用关心该字段 在项目中, 可具体参考DefaultTokenServices.java中属性refreshTokenValiditySeconds.

在实际应用中, 该值一般是由服务端处理的, 不需要客户端自定义.

additional_information 这是一个预留的字段,在Oauth的流程中没有实际的使用,可选,但若设置值,必须是JSON格式的数据,如:

{"country":"CN","country_code":"086"}

按照spring-security-oauth项目中对该字段的描述
Additional information for this client, not need by the vanilla OAuth protocol but might be useful, for example,for storing descriptive information.
(详见ClientDetails.javagetAdditionalInformation()方法的注释)在实际应用中, 可以用该字段来存储关于客户端的一些其他信息,如客户端的国家,地区,注册时的IP地址等等.

create_time 数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)
archived 用于标识客户端是否已存档(即实现逻辑删除),默认值为'0'(即未存档).
对该字段的具体使用请参考CustomJdbcClientDetailsService.java,在该类中,扩展了在查询client_details的SQL加上archived = 0条件 (扩展字段)
trusted 设置客户端是否为受信任的,默认为'0'(即不受信任的,1为受信任的).
该字段只适用于grant_type="authorization_code"的情况,当用户登录成功后,若该值为0,则会跳转到让用户Approve的页面让用户同意授权,
若该字段为1,则在登录后不需要再让用户Approve同意授权(因为是受信任的).
对该字段的具体使用请参考OauthUserApprovalHandler.java. (扩展字段)
autoapprove 设置用户是否自动Approval操作, 默认值为 'false', 可选值包括 'true','false', 'read','write'.
该字段只适用于grant_type="authorization_code"的情况,当用户登录成功后,若该值为'true'或支持的scope值,则会跳过用户Approve的页面, 直接授权.
该字段与 trusted 有类似的功能, 是 spring-security-oauth2 的 2.0 版本后添加的新属性.

在项目中,主要操作oauth_client_details表的类是JdbcClientDetailsService.java, 更多的细节请参考该类.
也可以根据实际的需要,去扩展或修改该类的实现.

oauth_client_token create_time 数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)
token_id 从服务器端获取到的access_token的值.
token 这是一个二进制的字段, 存储的数据是OAuth2AccessToken.java对象序列化后的二进制数据.
authentication_id 该字段具有唯一性, 是根据当前的username(如果有),client_id与scope通过MD5加密生成的.
具体实现请参考DefaultClientKeyGenerator.java类.
user_name 登录时的用户名
client_id  

该表用于在客户端系统中存储从服务端获取的token数据, 在spring-oauth-server项目中未使用到.
oauth_client_token表的主要操作在JdbcClientTokenServices.java类中, 更多的细节请参考该类.

oauth_access_token create_time 数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)
token_id 该字段的值是将access_token的值通过MD5加密后存储的.
token 存储将OAuth2AccessToken.java对象序列化后的二进制数据, 是真实的AccessToken的数据值.
authentication_id 该字段具有唯一性, 其值是根据当前的username(如果有),client_id与scope通过MD5加密生成的. 具体实现请参考DefaultAuthenticationKeyGenerator.java类.
user_name 登录时的用户名, 若客户端没有用户名(如grant_type="client_credentials"),则该值等于client_id
client_id  
authentication 存储将OAuth2Authentication.java对象序列化后的二进制数据.
refresh_token 该字段的值是将refresh_token的值通过MD5加密后存储的.

在项目中,主要操作oauth_access_token表的对象是JdbcTokenStore.java. 更多的细节请参考该类.

oauth_refresh_token create_time 数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)
token_id 该字段的值是将refresh_token的值通过MD5加密后存储的.
token 存储将OAuth2RefreshToken.java对象序列化后的二进制数据.
authentication 存储将OAuth2Authentication.java对象序列化后的二进制数据.

在项目中,主要操作oauth_refresh_token表的对象是JdbcTokenStore.java. (与操作oauth_access_token表的对象一样);更多的细节请参考该类.
如果客户端的grant_type不支持refresh_token,则不会使用该表.

oauth_code create_time 数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)
code 存储服务端系统生成的code的值(未加密).
authentication 存储将AuthorizationRequestHolder.java对象序列化后的二进制数据.

在项目中,主要操作oauth_code表的对象是JdbcAuthorizationCodeServices.java. 更多的细节请参考该类.
只有当grant_type为"authorization_code"时,该表中才会有数据产生; 其他的grant_type没有使用该表.


--
--  Oauth sql  -- MYSQL
--Drop table  if exists oauth_client_details;
create table oauth_client_details (client_id VARCHAR(255) PRIMARY KEY,resource_ids VARCHAR(255),client_secret VARCHAR(255),scope VARCHAR(255),authorized_grant_types VARCHAR(255),web_server_redirect_uri VARCHAR(255),authorities VARCHAR(255),access_token_validity INTEGER,refresh_token_validity INTEGER,additional_information TEXT,create_time timestamp default now(),archived tinyint(1) default '0',trusted tinyint(1) default '0',autoapprove VARCHAR (255) default 'false'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;Drop table  if exists oauth_access_token;
create table oauth_access_token (create_time timestamp default now(),token_id VARCHAR(255),token BLOB,authentication_id VARCHAR(255) UNIQUE,user_name VARCHAR(255),client_id VARCHAR(255),authentication BLOB,refresh_token VARCHAR(255)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;Drop table  if exists oauth_refresh_token;
create table oauth_refresh_token (create_time timestamp default now(),token_id VARCHAR(255),token BLOB,authentication BLOB
) ENGINE=InnoDB DEFAULT CHARSET=utf8;Drop table  if exists oauth_code;
create table oauth_code (create_time timestamp default now(),code VARCHAR(255),authentication BLOB
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- Add indexes
create index token_id_index on oauth_access_token (token_id);
create index authentication_id_index on oauth_access_token (authentication_id);
create index user_name_index on oauth_access_token (user_name);
create index client_id_index on oauth_access_token (client_id);
create index refresh_token_index on oauth_access_token (refresh_token);create index token_id_index on oauth_refresh_token (token_id);create index code_index on oauth_code (code);

Oauth2 数据库表说明相关推荐

  1. 数据库设计:用户登录系统数据库表设计

    用户登录系统数据库表设计 最近看了看公司后台用户登录系统的设计, 比较混乱, 主要还是因为URS和Oauth以及URS第三方这三个登录形式各不相同导致的. 下面着重介绍一下涉及到第三方登录中需要注意的 ...

  2. Go 学习笔记(55)— Go 标准库 sql (初始化数据库、插入、更新、删除数据库表、单行查询、多行查询、事务处理)

    1. 标准库说明 Go 的标准库中是没有数据库驱动,只提供了驱动接口,有很多第三方实现了驱动,我们这里选择 go-sql-driver 这个实现是目前使用最多的.github 地址是:https:// ...

  3. 客快物流大数据项目(五十二):根据数据库表及字段创建公共模块

    根据数据库表及字段创建公共模块 根据数据库的表及表结构创建Bean对象 一.在公共模块创建包结构 在公共模块的java目录下,创建如下程序包:

  4. mysql数据库增删改实例_Mysql1:数据库表操作,增删改查举例

    数据库表的相关操作 添加数据库表 语法: 实例: 查看数据库表 语法: show tables; 实例: 查看数据库表结构 1)使用DESCRIBE/DESC 语法: 实例: 2)SHOW CREAT ...

  5. activiti工作流连接mysql_Activiti工作流 安装myeclipse activiti设计插件并生成数据库表...

    从零开始学习Activiti工作流,记录下学习过程. 关于工作流的简介没什么好介绍了,只能说是个很有用的东西,数据库中23张表分别有什么用网上也有很详细的介绍,这里也不多加说明.activiti开发中 ...

  6. php 修改数据库表的字段的值

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. php 前端传递参数,遍历数据库表的字段后根据条件进行修改. <?phpheader("Con ...

  7. 关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题

    关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题,解决方法如下: 在数据库连接字串中,增加一个参数:Metadata Pooling=false 如"Da ...

  8. jPA自动创建数据库表的一些配置

    2019独角兽企业重金招聘Python工程师标准>>> jPA自动创建数据库表的一些配置 hibernate.cfg.xml 中hibernate.hbm2ddl.auto配置节点如 ...

  9. 干掉 powerdesigner,设计数据库表用它就够了

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 点击" 程序员内点事 "关注,选择&q ...

最新文章

  1. Invalid syntax for function signature in TLD
  2. 企业网络推广——企业网络推广更注重网站内部链接优化!
  3. apache属于什么类型的软件
  4. 轨迹匹配地图 python_基于地图的视觉定位(一)
  5. 中心城镇问题(长链剖分优化树形dp)
  6. 12.history的用法
  7. 关于计算机设计的英语作文,一篇关于计算机的看法的英语作文
  8. 一步步实现SDDC--多角色服务器部署
  9. python当作为条件表达式时_2019知到Python程序设计基础(山东联盟)结课测验答案...
  10. 游戏制作大致流程粗谈之五
  11. localdatetime获得时间搓_Java8 LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转...
  12. numpy和pandas官方文档中文版分享
  13. 偏微分方程数值解—ADI格式求解二维抛物型方程
  14. 神州十二号载人飞船和空间站对接成功 我们的目标是星辰大海!
  15. 【Office】Word空格无法添加下划线
  16. BootStrap4内容系列之文字排版
  17. RHEL8.x-RedHat-Podman
  18. 用 C++ 和 Java 写算法,差别大吗?
  19. windows系统重装
  20. 剪映专业版 1.2.0 - 一款全能好用的视频编辑工具

热门文章

  1. WPS如何转换成图片?三种方法帮你实现
  2. 【资源分享】Echarts中国地图、世界地图JSON数据(包括省市、经纬度、世界地图国家名称中英对照)
  3. 小米air2se耳机只有一边有声音怎么办_不到200元 小米蓝牙耳机Air2 SE是真香党的选择吗?...
  4. 小米air2se耳机只有一边有声音怎么办_小米推出与Air2系列的第三款Air2 SE拼性价比意义何在?...
  5. java模拟京东登陆_requests+beautifulsoup模拟登陆京东
  6. xxl-job配置发邮件 spring.mail的QQ邮箱配置
  7. 华硕ZX53VD笔记本的机械硬盘换成固态硬盘
  8. matlab响应曲面设计,分析响应曲面设计
  9. opengl生成图片php,(转)使用OpenGL显示图像(七)Android OpenGLES2.0——纹理贴图之显示图片...
  10. 关于ASCII码和ANSI码,以下说法不正确的是()?