Spring Boot OAuth2提供程序数据库表解释

时间:2018-06-11 10:25:02

标签: spring spring-boot spring-security oauth-2.0 spring-security-oauth2

我正在尝试使用JWT和Spring Boot 2实现OAuth2服务器。互联网上有一些很好的例子,例如thisthis。他们正在使用一些数据库表(oauth_client_detailsoauth_client_tokenoauth_codeoauth_approvalsClientDetails)和一堆字段。其中一些很容易理解,另一些则不容易理解。我无法找到关于需要哪些表格和字段及其含义的任何解释:

create table oauth_client_details (      /*Stores client details*/
  client_id VARCHAR(255) PRIMARY KEY,
  resource_ids VARCHAR(255),             /*Q1: is this comma separated list of resources?*/
  client_secret VARCHAR(255),
  scope VARCHAR(255),
  authorized_grant_types VARCHAR(255),
  web_server_redirect_uri VARCHAR(255),
  authorities VARCHAR(255),              /*Q2: what it this for?*/
  access_token_validity INTEGER,         /*Q3: Is this the validity period in seconds?*/
  refresh_token_validity INTEGER,
  additional_information VARCHAR(4096),  /*Q4: Can I omit this field if I don't need any additional information?*/
  autoapprove VARCHAR(255)               /*Q5: What does this mean?*/
);  

create table if not exists oauth_client_token ( /*Q6: What is this table for?*/
  token_id VARCHAR(255),
  token LONGVARBINARY,
  authentication_id VARCHAR(255) PRIMARY KEY,
  user_name VARCHAR(255),
  client_id VARCHAR(255)
);  

create table if not exists oauth_access_token ( /*Q7: Do I need this table if I use JWT?*/
  token_id VARCHAR(255),
  token LONGVARBINARY,
  authentication_id VARCHAR(255) PRIMARY KEY,
  user_name VARCHAR(255),
  client_id VARCHAR(255),
  authentication LONGVARBINARY,
  refresh_token VARCHAR(255)
);  

create table if not exists oauth_refresh_token ( /*Q8: Do I need this table if I use JWT?*/
  token_id VARCHAR(255),
  token LONGVARBINARY,
  authentication LONGVARBINARY
);  

create table if not exists oauth_code (
  code VARCHAR(255), authentication LONGVARBINARY
);  

create table if not exists oauth_approvals ( /*Q9: What it this for?*/
  userId VARCHAR(255),
  clientId VARCHAR(255),
  scope VARCHAR(255),
  status VARCHAR(10),
  expiresAt TIMESTAMP,
  lastModifiedAt TIMESTAMP
);  

create table if not exists ClientDetails ( /*Q10: Yet another client details???*/
  appId VARCHAR(255) PRIMARY KEY,
  resourceIds VARCHAR(255),
  appSecret VARCHAR(255),
  scope VARCHAR(255),
  grantTypes VARCHAR(255),
  redirectUrl VARCHAR(255),
  authorities VARCHAR(255),
  access_token_validity INTEGER,
  refresh_token_validity INTEGER,
  additionalInformation VARCHAR(4096),
  autoApproveScopes VARCHAR(255)
);

4 个答案:

答案 0 :(得分:2)

如果是JWT令牌,则无需oauth_access_token& oauth_refresh_token个表格。检查JwtTokenStore的实施以获取更多信息。

哪些表格是必需的,完全取决于您使用的OAuth Grant type。像oauth_code&如果您使用oauth_approvals授权类型,则需要Authorization code

scopeauthorities之间有所不同,请检查OAuth Scope vs Authorities

答案 1 :(得分:2)

以下是一些未回答的问题的答案。

Q4:是的,您可以省略

Q7,Q8:如果使用jwt,则不需要oauth_access_token,oauth_refresh_token表

当从客户端请求令牌时,访问令牌和相关详细信息存储在oauth_access_token表中。有效期到期后,将删除有关此令牌的详细信息。 oauth_refresh_token表存储刷新令牌的详细信息。访问令牌过期后,您可以使用此刷新令牌来获得新的访问令牌

答案 2 :(得分:1)

首先,很遗憾,我无法回答您所有的问题,但我至少可以回答一些问题:

Q1:是的,这是一个逗号分隔的列表。 Q3:是的,对。

只有某些表具有某些授权授予类型,如Afridi在他的回答中已经提到的。我发现这个特殊的page对于理解哪种授权类型如何工作以及我可能需要哪些表很有帮助。

Q10:我认为您不需要那个桌子。

答案 3 :(得分:0)

  • Q1:是的
  • 第 2 季度:不适用
  • Q3:是的
  • Q4:是的。注意:oauth_client_details 支持 JdbcClientDetailsService。您可以使用自定义表创建 ClientDetailsService 实现。
  • Q5:授权自动批准的客户端范围 服务器,支持授权码流程
  • Q6:此表由 JdbcClientTokenServices
  • 使用
  • Q7:是的,此表支持 JwtTokenStore
  • Q8:是的,此表支持 JwtTokenStore
  • Q9:店铺审批状态,支持授权码流程
  • Q10:如果您愿意,只需定制oauth_client_details