Объяснение таблиц базы данных провайдера Spring Boot OAuth2 - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь реализовать сервер OAuth2 с JWT и Spring Boot 2. В Интернете есть несколько хороших примеров, таких как this или this .Они используют несколько таблиц базы данных (oauth_client_details, oauth_client_token, oauth_code, oauth_approvals, ClientDetails) с кучей полей.Некоторые из них легко понять, другие нет.Я нигде не смог найти объяснения, какие таблицы и поля являются обязательными и что они означают:


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)
);

Ответы [ 2 ]

0 голосов
/ 01 августа 2018

Прежде всего, я, к сожалению, не могу ответить на все ваши вопросы, но я могу ответить по крайней мере на некоторые из них:

Q1: Да, это список через запятую.Q3: Да, это верно.

Несколько таблиц необходимы только с определенными типами разрешений на авторизацию, как уже упоминал Африди в своем ответе.Я нашел эту конкретную страницу довольно полезной для понимания того, как работает тип предоставления и какие таблицы мне могут понадобиться для этого.

В10: Я не думаю, что эта таблица вам нужна.

0 голосов
/ 11 июня 2018

В случае токена JWT нет необходимости в таблицах oauth_access_token и oauth_refresh_token.проверьте реализацию JwtTokenStore для получения дополнительной информации.

Какие таблицы необходимы, полностью зависит от OAuth Тип гранта , который вы используете.Таблицы типа oauth_code & oauth_approvals потребуются, если вы используете Authorization code тип предоставления.

отличается от scope до authorities, отметьте Область OAuth и полномочия

...