OAuth 修改access_token的存储位置

Posted 源 问 三 生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)类型。

 

正常的结果为:

 

以上是关于OAuth 修改access_token的存储位置的主要内容,如果未能解决你的问题,请参考以下文章

angular-oauth2-oidc 未设置 access_token

OAuth REST access_token 和 instance_url 到期时间?

oauth2认证后返回#怎么获取accesstoken?

#yyds干货盘点#oauth2 授权服务器相关表的作用

spring-oauth-server实践(1-5)为客户mobile-client开通授权码模式申请access_token,并使用access_token访问需要鉴权的业务

OAuth 刷新令牌最佳实践 [关闭]