四spring-security-oauth2配置詳解

spring-security-oauth2(授權(quán)服務(wù)器)

1授權(quán)服務(wù)配置

配置一個(gè)授權(quán)服務(wù)锁荔,需要考慮 授權(quán)類(lèi)型(GrantType)、不同授權(quán)類(lèi)型為客戶(hù)端(Client)提供了不同的獲取令牌(Token)方式贱迟,每一個(gè)客戶(hù)端(Client)都能夠通過(guò)明確的配置以及權(quán)限來(lái)實(shí)現(xiàn)不同的授權(quán)訪問(wèn)機(jī)制,也就是說(shuō)如果你提供了一個(gè) “client_credentials” 授權(quán)方式,并不意味著其它客戶(hù)端就要采用這種方式來(lái)授權(quán)

使用 @EnableAuthorizationServer 來(lái)配置授權(quán)服務(wù)機(jī)制,并繼承 AuthorizationServerConfigurerAdapter 該類(lèi)重寫(xiě) configure 方法定義授權(quán)服務(wù)器策略

2配置客戶(hù)端詳情(Client Details)

ClientDetailsServiceConfigurer 能夠使用內(nèi)存或 JDBC 方式實(shí)現(xiàn)獲取已注冊(cè)的客戶(hù)端詳情百拓,有幾個(gè)重要的屬性:

clientId:客戶(hù)端標(biāo)識(shí) ID

secret:客戶(hù)端安全碼

scope:客戶(hù)端訪問(wèn)范圍琴锭,默認(rèn)為空則擁有全部范圍

authorizedGrantTypes:客戶(hù)端使用的授權(quán)類(lèi)型,默認(rèn)為空

authorities:客戶(hù)端可使用的權(quán)限

3管理令牌(Managing Token)

ResourceServerTokenServices 接口定義了令牌加載耐版、讀取方法

AuthorizationServerTokenServices 接口定義了令牌的創(chuàng)建祠够、獲取压汪、刷新方法

ConsumerTokenServices 定義了令牌的撤銷(xiāo)方法

DefaultTokenServices 實(shí)現(xiàn)了上述三個(gè)接口,它包含了一些令牌業(yè)務(wù)的實(shí)現(xiàn)粪牲,如創(chuàng)建令牌、讀取令牌止剖、刷新令牌腺阳、獲取客戶(hù)端ID。默認(rèn)的當(dāng)嘗試創(chuàng)建一個(gè)令牌時(shí)穿香,是使用 UUID 隨機(jī)值進(jìn)行填充的亭引,除了持久化令牌是委托一個(gè) TokenStore 接口實(shí)現(xiàn)以外,這個(gè)類(lèi)幾乎幫你做了所有事情

而 TokenStore 接口也有一些實(shí)現(xiàn):

InMemoryTokenStore:默認(rèn)采用該實(shí)現(xiàn),將令牌信息保存在內(nèi)存中,易于調(diào)試

JdbcTokenStore:令牌會(huì)被保存近關(guān)系型數(shù)據(jù)庫(kù)撕瞧,可以在不同服務(wù)器之間共享令牌

JwtTokenStore:使用 JWT 方式保存令牌注服,它不需要進(jìn)行存儲(chǔ),但是它撤銷(xiāo)一個(gè)已經(jīng)授權(quán)令牌會(huì)非常困難呻率,所以通常用來(lái)處理一個(gè)生命周期較短的令牌以及撤銷(xiāo)刷新令牌

4JWT 令牌(JWT Tokens)

使用 JWT 令牌需要在授權(quán)服務(wù)中使用 JWTTokenStore,資源服務(wù)器也需要一個(gè)解碼 Token 令牌的類(lèi) JwtAccessTokenConverter,JwtTokenStore 依賴(lài)這個(gè)類(lèi)進(jìn)行編碼以及解碼宏浩,因此授權(quán)服務(wù)以及資源服務(wù)都需要配置這個(gè)轉(zhuǎn)換類(lèi)

Token 令牌默認(rèn)是有簽名的,并且資源服務(wù)器中需要驗(yàn)證這個(gè)簽名靠瞎,因此需要一個(gè)對(duì)稱(chēng)的 Key 值比庄,用來(lái)參與簽名計(jì)算

這個(gè) Key? 值存在于授權(quán)服務(wù)和資源服務(wù)之中,或者使用非對(duì)稱(chēng)加密算法加密 Token 進(jìn)行簽名乏盐,Public Key 公布在 /oauth/token_key 這個(gè) URL 中

默認(rèn) /oauth/token_key 的訪問(wèn)安全規(guī)則是 "denyAll()" 即關(guān)閉的佳窑,可以注入一個(gè)標(biāo)準(zhǔn)的 SpingEL 表達(dá)式到 AuthorizationServerSecurityConfigurer 配置類(lèi)中將它開(kāi)啟,例如 permitAll()

需要引入 spring-security-jwt 庫(kù)

5配置授權(quán)類(lèi)型(Grant Types)

授權(quán)是使用 AuthorizationEndpoint 這個(gè)端點(diǎn)來(lái)進(jìn)行控制的父能,使用 AuthorizationServerEndpointsConfigurer 這個(gè)對(duì)象實(shí)例來(lái)進(jìn)行配置华嘹,默認(rèn)是支持除了密碼授權(quán)外所有標(biāo)準(zhǔn)授權(quán)類(lèi)型,它可配置以下屬性:

authenticationManager:認(rèn)證管理器法竞,當(dāng)你選擇了資源所有者密碼(password)授權(quán)類(lèi)型的時(shí)候耙厚,請(qǐng)?jiān)O(shè)置這個(gè)屬性注入一個(gè) AuthenticationManager 對(duì)象

userDetailsService:可定義自己的 UserDetailsService 接口實(shí)現(xiàn)

authorizationCodeServices:用來(lái)設(shè)置收取碼服務(wù)的(即 AuthorizationCodeServices 的實(shí)例對(duì)象),主要用于 "authorization_code" 授權(quán)碼類(lèi)型模式

implicitGrantService:這個(gè)屬性用于設(shè)置隱式授權(quán)模式岔霸,用來(lái)管理隱式授權(quán)模式的狀態(tài)

tokenGranter:完全自定義授權(quán)服務(wù)實(shí)現(xiàn)(TokenGranter 接口實(shí)現(xiàn))薛躬,只有當(dāng)標(biāo)準(zhǔn)的四種授權(quán)模式已無(wú)法滿(mǎn)足需求時(shí)

6配置授權(quán)端點(diǎn) URL(Endpoint URLs)

AuthorizationServerEndpointsConfigurer 配置對(duì)象有一個(gè) pathMapping() 方法用來(lái)配置端點(diǎn)的 URL,它有兩個(gè)參數(shù):

參數(shù)一:端點(diǎn) URL 默認(rèn)鏈接

參數(shù)二:替代的 URL 鏈接

下面是一些默認(rèn)的端點(diǎn) URL:

/oauth/authorize:授權(quán)端點(diǎn)

/oauth/token:令牌端點(diǎn)

/oauth/confirm_access:用戶(hù)確認(rèn)授權(quán)提交端點(diǎn)

/oauth/error:授權(quán)服務(wù)錯(cuò)誤信息端點(diǎn)

/oauth/check_token:用于資源服務(wù)訪問(wèn)的令牌解析端點(diǎn)

/oauth/token_key:提供公有密匙的端點(diǎn)呆细,如果你使用JWT令牌的話

授權(quán)端點(diǎn)的 URL 應(yīng)該被 Spring Security 保護(hù)起來(lái)只供授權(quán)用戶(hù)訪問(wèn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末型宝,一起剝皮案震驚了整個(gè)濱河市八匠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌趴酣,老刑警劉巖梨树,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異岖寞,居然都是意外死亡抡四,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)仗谆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)指巡,“玉大人,你說(shuō)我怎么就攤上這事隶垮≡逖” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵狸吞,是天一觀的道長(zhǎng)勉耀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蹋偏,這世上最難降的妖魔是什么便斥? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮暖侨,結(jié)果婚禮上椭住,老公的妹妹穿的比我還像新娘。我一直安慰自己字逗,他們只是感情好京郑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著葫掉,像睡著了一般些举。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俭厚,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天户魏,我揣著相機(jī)與錄音,去河邊找鬼挪挤。 笑死叼丑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扛门。 我是一名探鬼主播鸠信,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼论寨!你這毒婦竟也來(lái)了星立?” 一聲冷哼從身側(cè)響起爽茴,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绰垂,沒(méi)想到半個(gè)月后室奏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劲装,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年胧沫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酱畅。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡琳袄,死狀恐怖江场,靈堂內(nèi)的尸體忽然破棺而出纺酸,到底是詐尸還是另有隱情,我是刑警寧澤址否,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布餐蔬,位于F島的核電站,受9級(jí)特大地震影響佑附,放射性物質(zhì)發(fā)生泄漏樊诺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一音同、第九天 我趴在偏房一處隱蔽的房頂上張望词爬。 院中可真熱鬧,春花似錦权均、人聲如沸顿膨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恋沃。三九已至,卻和暖如春必指,著一層夾襖步出監(jiān)牢的瞬間囊咏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工塔橡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梅割,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓葛家,卻偏偏與公主長(zhǎng)得像户辞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惦银,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354