您好,登錄后才能下訂單哦!
如何看待spring Oauth2數據結構,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
oauth_client_details
client_id | 主鍵,必須唯一,不能為空. 用于唯一標識每一個客戶端(client); 在注冊時必須填寫(也可由服務端自動生成). 對于不同的grant_type,該字段都是必須的. 在實際應用中的另一個名稱叫appKey,與client_id是同一個概念. |
resource_ids | 客戶端所能訪問的資源id集合,多個資源時用逗號(,)分隔,如: "unity-resource,mobile-resource". 該字段的值必須來源于與security.xml中標簽?oauth3:resource-server的屬性resource-id值一致. 在security.xml配置有幾個?oauth3:resource-server標簽, 則該字段可以使用幾個該值. 在實際應用中, 我們一般將資源進行分類,并分別配置對應的?oauth3:resource-server,如訂單資源配置一個?oauth3:resource-server, 用戶資源又配置一個?oauth3: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是否一致. 下面分別說明: 當grant_type=authorization_code時, 第一步 從 spring-oauth-server獲取 'code'時客戶端發起請求時必須有redirect_uri參數, 該參數的值必須與web_server_redirect_uri的值一致. 第二步 用 'code' 換取 'access_token' 時客戶也必須傳遞相同的redirect_uri. 在實際應用中, web_server_redirect_uri在注冊時是必須填寫的, 一般用來處理服務器返回的code, 驗證state是否合法與通過code去換取access_token值. 在spring-oauth-client項目中, 可具體參考AuthorizationCodeController.java中的authorizationCodeCallback方法. 當grant_type=implicit時通過redirect_uri的hash值來傳遞access_token值.如: http://localhost:7777/spring-oauth-client/implicit#access_token=dc891f4a-ac88-4ba6-8224-a2497e013865&token_type=bearer&expires_in=43199 然后客戶端通過JS等從hash值中取到access_token值. |
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天). 在實際應用中, 該值一般是由服務端處理的, 不需要客戶端自定義. |
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地址等等. |
autoapprove | 設置用戶是否自動Approval操作, 默認值為 'false', 可選值包括 'true','false', 'read','write'. 該字段只適用于grant_type="authorization_code"的情況,當用戶登錄成功后,若該值為'true'或支持的scope值,則會跳過用戶Approve的頁面, 直接授權. 該字段與 trusted 有類似的功能, 是 spring-security-oauth3 的 2.0 版本后添加的新屬性. |
看完上述內容,你們掌握如何看待spring Oauth2數據結構的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。