OAuth2 數據庫表說明文檔
以下對OAuth2數據庫字段的功能做詳細說明:(此文檔添加了create_time擴展字段)
表名 | 字段名 | 字段說明 |
---|---|---|
oauth_client_details | client_id |
主鍵,必須唯一,不能爲空.
用於唯一標識每一個客戶端(client); 在註冊時必須填寫(也可由服務端自動生成). 對於不同的grant_type,該字段都是必須的. 在實際應用中的另一個名稱叫appKey,與client_id是同一個概念. |
resource_ids |
客戶端所能訪問的資源id集合,多個資源時用逗號(,)分隔,如: "unity-resource,mobile-resource".
該字段的值必須來源於與 security.xml 中標籤‹oauth2:resource-server 的屬性resource-id 值一致.
在security.xml 配置有幾個‹oauth2:resource-server 標籤, 則該字段可以使用幾個該值.
在實際應用中, 我們一般將資源進行分類,並分別配置對應的 ‹oauth2:resource-server ,如訂單資源配置一個‹oauth2:resource-server ,
用戶資源又配置一個‹oauth2:resource-server . 當註冊客戶端時,根據實際需要可選擇資源id,也可根據不同的註冊流程,賦予對應的資源id.
|
|
client_secret |
用於指定客戶端(client)的訪問密匙; 在註冊時必須填寫(也可由服務端自動生成).
對於不同的grant_type,該字段都是必須的. 在實際應用中的另一個名稱叫appSecret,與client_secret是同一個概念. |
|
scope |
指定客戶端申請的權限範圍,可選值包括read,write,trust;若有多個權限範圍用逗號(,)分隔,如: "read,write".
scope的值與 security.xml 中配置的‹intercept-url 的access 屬性有關係.
如‹intercept-url 的配置爲
‹intercept-url pattern="/m/**" access="ROLE_MOBILE,SCOPE_READ"/>則說明訪問該URL時的客戶端必須有read權限範圍. write的配置值爲SCOPE_WRITE, trust的配置值爲SCOPE_TRUST. 在實際應該中, 該值一般由服務端指定, 常用的值爲read,write. |
|
authorized_grant_types |
指定客戶端支持的grant_type,可選值包括authorization_code,password,refresh_token,implicit,client_credentials,
若支持多個grant_type用逗號(,)分隔,如: "authorization_code,password".
在實際應用中,當註冊時,該字段是一般由服務器端指定的,而不是由申請者去選擇的,最常用的grant_type組合有: "authorization_code,refresh_token"(針對通過瀏覽器訪問的客戶端); "password,refresh_token"(針對移動設備的客戶端). implicit與client_credentials在實際中很少使用. |
|
web_server_redirect_uri |
客戶端的重定向URI,可爲空, 當grant_type爲authorization_code 或implicit 時,
在Oauth的流程中會使用並檢查與註冊時填寫的redirect_uri是否一致. 下面分別說明:
|
|
authorities |
指定客戶端所擁有的Spring Security的權限值,可選, 若有多個權限值,用逗號(,)分隔, 如: "ROLE_UNITY,ROLE_USER".
對於是否要設置該字段的值,要根據不同的grant_type來判斷, 若客戶端在Oauth流程中需要用戶的用戶名(username)與密碼(password)的( authorization_code ,password ),
則該字段可以不需要設置值,因爲服務端將根據用戶在服務端所擁有的權限來判斷是否有權限訪問對應的API. 但如果客戶端在Oauth流程中不需要用戶信息的( implicit ,client_credentials ),
則該字段必須要設置對應的權限值, 因爲服務端將根據該字段值的權限來判斷是否有權限訪問對應的API. (請在spring-oauth-client項目中來測試不同grant_type時authorities的變化) |
|
access_token_validity |
設定客戶端的access_token的有效時間值(單位:秒),可選, 若不設定值則使用默認的有效時間值(60 * 60 * 12, 12小時).
在服務端獲取的access_token JSON數據中的 expires_in 字段的值即爲當前access_token的有效時間值.
在項目中, 可具體參考 DefaultTokenServices.java 中屬性accessTokenValiditySeconds .
在實際應用中, 該值一般是由服務端處理的, 不需要客戶端自定義. |
|
refresh_token_validity |
設定客戶端的refresh_token的有效時間值(單位:秒),可選, 若不設定值則使用默認的有效時間值(60 * 60 * 24 * 30, 30天).
若客戶端的grant_type不包括 refresh_token ,則不用關心該字段
在項目中, 可具體參考DefaultTokenServices.java 中屬性refreshTokenValiditySeconds .
在實際應用中, 該值一般是由服務端處理的, 不需要客戶端自定義. |
|
additional_information |
這是一個預留的字段,在Oauth的流程中沒有實際的使用,可選,但若設置值,必須是JSON格式的數據,如:
{"country":"CN","country_code":"086"}按照 spring-security-oauth 項目中對該字段的描述
Additional information for this client, not need by the vanilla OAuth protocol but might be useful, for example,for storing descriptive information. (詳見 ClientDetails.java 的getAdditionalInformation() 方法的註釋)
在實際應用中, 可以用該字段來存儲關於客戶端的一些其他信息,如客戶端的國家,地區,註冊時的IP地址等等.
|
|
create_time | 數據的創建時間,精確到秒,由數據庫在插入數據時取當前系統時間自動生成(擴展字段) | |
autoapprove |
設置用戶是否自動Approval操作, 默認值爲 'false', 可選值包括 'true','false', 'read','write'.
該字段只適用於grant_type="authorization_code"的情況,當用戶登錄成功後,若該值爲'true'或支持的scope值,則會跳過用戶Approve的頁面, 直接授權. |
|
在項目中,主要操作 |
||
oauth_client_token | create_time | 數據的創建時間,精確到秒,由數據庫在插入數據時取當前系統時間自動生成(擴展字段) |
token_id |
從服務器端獲取到的access_token 的值.
|
|
token |
這是一個二進制的字段, 存儲的數據是OAuth2AccessToken.java 對象序列化後的二進制數據.
|
|
authentication_id |
該字段具有唯一性, 是根據當前的username(如果有),client_id與scope通過MD5加密生成的.
具體實現請參考 DefaultClientKeyGenerator.java 類.
|
|
user_name | 登錄時的用戶名 | |
client_id | ||
該表用於在客戶端系統中存儲從服務端獲取的token數據,
在spring-oauth-server項目中未使用到.
|
||
oauth_access_token | create_time | 數據的創建時間,精確到秒,由數據庫在插入數據時取當前系統時間自動生成(擴展字段) |
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加密後存儲的.
|
|
在項目中,主要操作 |
||
oauth_refresh_token | create_time | 數據的創建時間,精確到秒,由數據庫在插入數據時取當前系統時間自動生成(擴展字段) |
token_id |
該字段的值是將refresh_token 的值通過MD5加密後存儲的.
|
|
token |
存儲將OAuth2RefreshToken.java 對象序列化後的二進制數據.
|
|
authentication |
存儲將OAuth2Authentication.java 對象序列化後的二進制數據.
|
|
在項目中,主要操作 |
||
oauth_code | create_time | 數據的創建時間,精確到秒,由數據庫在插入數據時取當前系統時間自動生成(擴展字段) |
code |
存儲服務端系統生成的code 的值(未加密).
|
|
authentication |
存儲將AuthorizationRequestHolder.java 對象序列化後的二進制數據.
|
|
在項目中,主要操作 |