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)類型。
正常的結果為: