OAuth 修改access_token的存储位置

OAuth 修改access_token的存储位置

OAuth 修改access_token的存储位置,将Redis存储换为JDBC存储。

背景

项目需求改变,需要将原本存储在Redis中的access_token变为存储在SQLserver中。

实施

做起来也比较简单,只需要将原来的TokenStore实现从RedisStore改为JdbcTkenStore再在DB中创建oauth_access_token表即可

代码如下:

@Bean
public TokenStore tokenStore() {
    return new JdbcTokenStore(dataSource());
}

DB脚本如下:

Mysql:

create table oauth_access_token (
  token_id VARCHAR(128),
  token BLOB,
  authentication_id VARCHAR(128) PRIMARY KEY,
  user_name VARCHAR(128),
  client_id VARCHAR(128),
  authentication BLOB,
  refresh_token VARCHAR(128)
);

SQLServer

create table oauth_access_token (
  token_id VARCHAR(128),
  token  varbinary(max),
  authentication_id VARCHAR(128) PRIMARY KEY,
  user_name VARCHAR(128),
  client_id VARCHAR(128),
  authentication  varbinary(max),
  refresh_token VARCHAR(128)
);

 字段解释

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加密后存储的

这里需要特别注意的是BOLB类型与varbinary(max)类型。

正常的结果为:

原文地址:https://www.cnblogs.com/Edward-Wang/p/13386882.html