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脚本如下:
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 到期时间?
spring-oauth-server实践(1-5)为客户mobile-client开通授权码模式申请access_token,并使用access_token访问需要鉴权的业务