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)類型。

 

正常的結果為:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM