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)类型。
正常的结果为: