Spring Security基于Oauth2的SSO單點(diǎn)登錄怎樣做?一個(gè)注解搞定

mark

一武鲁、說明

單點(diǎn)登錄顧名思義就是在多個(gè)應(yīng)用系統(tǒng)中爽雄,只需要登錄一次,就可以訪問其他相互信任的應(yīng)用系統(tǒng)沐鼠,免除多次登錄的煩惱挚瘟。本文主要介紹 同域跨域 兩種不同場(chǎng)景單點(diǎn)登錄的實(shí)現(xiàn)原理,并使用 Spring Security 來實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的跨域 SSO客戶端 饲梭。

?

二乘盖、原理說明

單點(diǎn)登錄主流都是基于共享 cookie 來實(shí)現(xiàn)的,下面分別介紹 同域跨域 下的兩種場(chǎng)景具體怎樣實(shí)現(xiàn)共享 cookie

2.1. 同域單點(diǎn)登錄

適用場(chǎng)景:都是企業(yè)自己的系統(tǒng)排拷,所有系統(tǒng)都使用同一個(gè)一級(jí)域名通過不同的二級(jí)域名來區(qū)分侧漓。

舉個(gè)例子:公司有一個(gè)一級(jí)域名為 zlt.com ,我們有三個(gè)系統(tǒng)分別是:門戶系統(tǒng)(sso.zlt.com)监氢、應(yīng)用1(app1.zlt.com)應(yīng)用2(app2.zlt.com)布蔗,需要實(shí)現(xiàn)系統(tǒng)之間的單點(diǎn)登錄藤违,實(shí)現(xiàn)架構(gòu)如下:

file

核心原理:

  1. 門戶系統(tǒng)設(shè)置 Cookiedomain 為一級(jí)域名也就是 zlt.com,這樣就可以共享門戶的 Cookie 給所有的使用該域名(xxx.zlt.com)的系統(tǒng)
  2. 使用 Spring Session 等技術(shù)讓所有系統(tǒng)共享 Session
  3. 這樣只要門戶系統(tǒng)登錄之后無論跳轉(zhuǎn)應(yīng)用1或者應(yīng)用2纵揍,都能通過門戶 Cookie 中的 sessionId 讀取到 Session 中的登錄信息實(shí)現(xiàn)單點(diǎn)登錄

?

2.2. 跨域單點(diǎn)登錄

單點(diǎn)登錄之間的系統(tǒng)域名不一樣顿乒,例如第三方系統(tǒng)。由于域名不一樣不能共享 Cookie 了泽谨,這樣就需要通過一個(gè)單獨(dú)的授權(quán)服務(wù)(UAA)來做統(tǒng)一登錄璧榄,并基于共享UAA的 Cookie 來實(shí)現(xiàn)單點(diǎn)登錄。

舉個(gè)例子:有兩個(gè)系統(tǒng)分別是:應(yīng)用1(webApp.com)應(yīng)用2(zlt.com)需要實(shí)現(xiàn)單點(diǎn)登錄吧雹,另外有一個(gè)UAA授權(quán)中心(sso.com)骨杂,實(shí)現(xiàn)架構(gòu)如下:

file

核心原理:

  1. 訪問系統(tǒng)1判斷未登錄,則跳轉(zhuǎn)到UAA系統(tǒng)請(qǐng)求授權(quán)
  2. UAA系統(tǒng)域名 sso.com 下的登錄地址中輸入用戶名/密碼完成登錄
  3. 登錄成功后UAA系統(tǒng)把登錄信息保存到 Session 中雄卷,并在瀏覽器寫入域?yàn)?sso.comCookie
  4. 訪問系統(tǒng)2判斷未登錄搓蚪,則跳轉(zhuǎn)到UAA系統(tǒng)請(qǐng)求授權(quán)
  5. 由于是跳轉(zhuǎn)到UAA系統(tǒng)的域名 sso.com 下,所以能通過瀏覽器中UAA的 Cookie 讀取到 Session 中之前的登錄信息完成單點(diǎn)登錄

?

2.3. 基于Oauth2的跨域單點(diǎn)登錄流程

mark

關(guān)于Oauth2的授權(quán)碼模式這里就不做介紹了丁鹉,自行找資料了解

?

三妒潭、Spring Security實(shí)現(xiàn)

Oauth2單點(diǎn)登錄除了需要授權(quán)中心完成統(tǒng)一登錄/授權(quán)邏輯之外

基于 Spring Security 實(shí)現(xiàn)的UUA統(tǒng)一授權(quán)中心可以參考:https://gitee.com/zlt2000/microservices-platform/tree/master/zlt-uaa

各個(gè)系統(tǒng)本身(sso客戶端)也需要實(shí)現(xiàn)以下邏輯:

  1. 攔截請(qǐng)求判斷登錄狀態(tài)
  2. UAA授權(quán)中心 通過 Oauth2授權(quán)碼模式 交互完成登錄/單點(diǎn)登錄
  3. 保存用戶登錄信息

以上邏輯只需使用一個(gè) @EnableOAuth2Sso 注解即可實(shí)現(xiàn)

mark

SpringBoot配置如下:

mark

下圖是訪問 sso客戶端 時(shí) @EnableOAuth2Sso 注解與 UAA授權(quán)中心 通過 Oauth2授權(quán)碼模式 交互完成單點(diǎn)登錄的步驟

mark

請(qǐng)結(jié)合上面單點(diǎn)時(shí)序圖中單點(diǎn)登錄系統(tǒng)2的1~5步

PS:如果系統(tǒng)用的不是 Spring Security 怎么辦?理解原理自行實(shí)現(xiàn)

?

四揣钦、demo下載地址

https://gitee.com/zlt2000/microservices-platform/tree/master/zlt-demo/sso-demo

?
掃碼關(guān)注有驚喜雳灾!

file
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市冯凹,隨后出現(xiàn)的幾起案子谎亩,更是在濱河造成了極大的恐慌,老刑警劉巖谈竿,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件团驱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡空凸,警方通過查閱死者的電腦和手機(jī)嚎花,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呀洲,“玉大人紊选,你說我怎么就攤上這事〉蓝海” “怎么了兵罢?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)滓窍。 經(jīng)常有香客問我壤圃,道長(zhǎng)校哎,這世上最難降的妖魔是什么膨报? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮即横,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘裆赵。我一直安慰自己东囚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布战授。 她就那樣靜靜地躺著页藻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪植兰。 梳的紋絲不亂的頭發(fā)上份帐,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音楣导,去河邊找鬼弥鹦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爷辙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朦促,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼膝晾,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了务冕?” 一聲冷哼從身側(cè)響起血当,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎禀忆,沒想到半個(gè)月后臊旭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡箩退,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年离熏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戴涝。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滋戳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出啥刻,到底是詐尸還是另有隱情奸鸯,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布可帽,位于F島的核電站娄涩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏映跟。R本人自食惡果不足惜蓄拣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一扬虚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弯蚜,春花似錦孔轴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至收厨,卻和暖如春晋柱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诵叁。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工雁竞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拧额。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓碑诉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親侥锦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子进栽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容