溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

發(fā)布時(shí)間:2021-09-10 18:08:50 來(lái)源:億速云 閱讀:113 作者:柒染 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān) OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

自動(dòng)批準(zhǔn)授權(quán)碼

前面我們授權(quán)的流程中,第一步獲取授權(quán)碼的時(shí)候,都會(huì)經(jīng)歷一個(gè)授權(quán)是否同意頁(yè)面:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

這個(gè)流程就像第三方登錄成功后,提問(wèn)是否允許獲取昵稱和頭像信息的頁(yè)面一樣,這個(gè)過(guò)程其實(shí)是可以自動(dòng)同意的,需要在客戶端配置中,增加一個(gè)自動(dòng)批準(zhǔn):

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

這樣我們申請(qǐng)授權(quán)碼直接就可以得到:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

在流程需要自動(dòng)完成的時(shí)候,需要這樣配置,如果需要用戶點(diǎn)擊同意,那么這里需要設(shè)置為false,不寫(xiě)默認(rèn)也是false。

客戶端信息整理

上面的自動(dòng)批準(zhǔn)只是客戶端配置中一個(gè)小的配置,下面我們來(lái)系統(tǒng)整理一下客戶端所有可配置的內(nèi)容。首先來(lái)看現(xiàn)在已經(jīng)配置的6個(gè)字段:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

上面的6個(gè)字段是我們最常用的也是不可或缺的客戶端信息。不過(guò)客戶端的配置還有很多其它的字段,我們來(lái)整體看一下:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

上面的11個(gè)字段基本上包括了所有的第三方客戶端的配置內(nèi)容。下面來(lái)一個(gè)個(gè)詳細(xì)講解:

  • withClient 方法:用來(lái)配置 client_id ,是必須配置的,用于唯一標(biāo)識(shí)每一個(gè)客戶端(client);注冊(cè)時(shí)必須填寫(xiě)(也可以服務(wù)端自動(dòng)生成),這個(gè)字段是必須的,實(shí)際應(yīng)用也有叫app_key

  • resourceIds 方法:用來(lái)配置resource_ids ,表示客戶端能訪問(wèn)的資源id集合,注冊(cè)客戶端時(shí),根據(jù)實(shí)際需要可選擇資源id,也可以根據(jù)不同的注冊(cè)流程,賦予對(duì)應(yīng)的額資源id。我們可以為每一個(gè)Resource Server(資源服務(wù))設(shè)置一個(gè)resourceid。再給client授權(quán)的時(shí)候,可以設(shè)置這個(gè)client可以訪問(wèn)哪一些資源實(shí)例,如果沒(méi)設(shè)置,就是對(duì)所有的resource都有訪問(wèn)權(quán)限。

  • secret 方法:用來(lái)配置 client_secret ,注冊(cè)填寫(xiě)或者服務(wù)端自動(dòng)生成,實(shí)際應(yīng)用也有叫app_secret,

  • scopes 方法 :用來(lái)配置 scope ,指定client的權(quán)限范圍,比如讀寫(xiě)權(quán)限,比如移動(dòng)端還是web端權(quán)限,all表示全部權(quán)限

  • authorizedGrantTypes 方法:用來(lái)配置 authorized_grant_types ,可選值, 授權(quán)碼模式:authorization_code,密碼模式:password,刷新token: refresh_token, 隱式模式: implicit: 客戶端模式: client_credentials。支持多個(gè)用逗號(hào)分隔

  • redirectUris 方法: 用來(lái)配置 web_server_redirect_uri ,客戶端重定向uri,authorization_code和implicit需要該值進(jìn)行校驗(yàn),注冊(cè)時(shí)填寫(xiě)

  • authorities 方法:用來(lái)配置 authorities ,指定用戶的權(quán)限范圍,如果授權(quán)的過(guò)程需要用戶登陸,該字段不生效,implicit和client_credentials需要

  • accessTokenValiditySeconds 方法,用來(lái)配置 access_token_validity ,設(shè)置access_token的有效時(shí)間(秒),默認(rèn)(12小時(shí))

  • refreshTokenValiditySeconds 方法:用來(lái)配置 refresh_token_validity ,設(shè)置refresh_token有效期(秒),默認(rèn)(30天)

  • additionalInformation 方法: 用來(lái)配置 additional_information ,表示補(bǔ)充信息,可空,值必須是json格式

  • autoApprove 方法:用來(lái)配置autoapprove ,默認(rèn)false,適用于authorization_code模式,設(shè)置用戶是否自動(dòng)approval操作,設(shè)置true跳過(guò)用戶確認(rèn)授權(quán)操作頁(yè)面,直接跳到redirect_uri

下面我們?cè)跀?shù)據(jù)庫(kù)中新建一張表,定義這是十一個(gè)字段,表名為 oauth_client_details:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

注意,這里表名必須是 oauth_client_details 是 oauth規(guī)定的表名,也是默認(rèn)的jdbc操作中的表名。我們來(lái)增加一條記錄:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

相比前面的例子,這里多了一個(gè)resource_ids的字段值,其它的都和前面的配置一樣。注意secret存儲(chǔ)的是加密后的密文,加密前是secret。

授權(quán)服務(wù)多了一個(gè)resource_id,資源服務(wù)也得配置自己的id:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

默認(rèn)的jdbc管理客戶端

將配置死的客戶端信息改為jdbc從客戶端查詢的方式很簡(jiǎn)單,首先引入數(shù)據(jù)庫(kù)依賴:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

然后配置數(shù)據(jù)源:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

最后修改授權(quán)配置類的客戶端配置:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

可以看到修改后的客戶端配置很簡(jiǎn)單,只需要在客戶端配置一個(gè)jdbc數(shù)據(jù)源即可,查詢方法是自動(dòng)實(shí)現(xiàn)的。關(guān)于實(shí)現(xiàn),可以參考源碼:

  • org.springframework.security.oauth3.provider.client.JdbcClientDetailsService

里面有寫(xiě)好的sql語(yǔ)句和增刪改查邏輯:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

其中有個(gè)更新秘鑰的方法,是需要加密方式的:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

所以我們可以在jdbc方法后面配置加密方式:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

測(cè)試

上面的除了數(shù)據(jù)庫(kù),其它的配置修改很簡(jiǎn)單,下面來(lái)測(cè)試一下:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

訪問(wèn)結(jié)果:

OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例

關(guān)于 OAuth2.0數(shù)據(jù)庫(kù)JDBC存儲(chǔ)客戶端的示例就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI