本文目錄一覽:
OAuth2實現單點登錄SSO
1. 前言
技術這東西吧,看別人寫的好像很簡單似的,到自己去寫的時候就各種問題,「一看就會,一做就錯」。網上關於實現SSO的文章一大堆,但是當你真的照着寫的時候就會發現根本不是那麼回事兒,簡直讓人抓狂,尤其是對於我這樣的菜鳥。幾經曲折,終於搞定了,決定記錄下來,以便後續查看。先來看一下效果
2. 準備
2.1. 單點登錄
最常見的例子是,我們打開淘寶APP,首頁就會有天貓、聚划算等服務的鏈接,當你點擊以後就直接跳過去了,並沒有讓你再登錄一次
下面這個圖是我再網上找的,我覺得畫得比較明白:
可惜有點兒不清晰,於是我又畫了個簡版的:
重要的是理解:
2.2. OAuth2
推薦以下幾篇博客
《 OAuth 2.0 》
《 Spring Security對OAuth2的支持 》
3. 利用OAuth2實現單點登錄
接下來,只講跟本例相關的一些配置,不講原理,不講為什麼
眾所周知,在OAuth2在有授權服務器、資源服務器、客戶端這樣幾個角色,當我們用它來實現SSO的時候是不需要資源服務器這個角色的,有授權服務器和客戶端就夠了。
授權服務器當然是用來做認證的,客戶端就是各個應用系統,我們只需要登錄成功後拿到用戶信息以及用戶所擁有的權限即可
之前我一直認為把那些需要權限控制的資源放到資源服務器里保護起來就可以實現權限控制,其實是我想錯了,權限控制還得通過Spring Security或者自定義攔截器來做
3.1. Spring Security 、OAuth2、JWT、SSO
在本例中,一定要分清楚這幾個的作用
首先,SSO是一種思想,或者說是一種解決方案,是抽象的,我們要做的就是按照它的這種思想去實現它
其次,OAuth2是用來允許用戶授權第三方應用訪問他在另一個服務器上的資源的一種協議,它不是用來做單點登錄的,但我們可以利用它來實現單點登錄。在本例實現SSO的過程中,受保護的資源就是用戶的信息(包括,用戶的基本信息,以及用戶所具有的權限),而我們想要訪問這這一資源就需要用戶登錄並授權,OAuth2服務端負責令牌的發放等操作,這令牌的生成我們採用JWT,也就是說JWT是用來承載用戶的Access_Token的
最後,Spring Security是用於安全訪問的,這裡我們我們用來做訪問權限控制
4. 認證服務器配置
4.1. Maven依賴
這裏面最重要的依賴是:spring-security-oauth2-autoconfigure
4.2. application.yml
4.3. AuthorizationServerConfig(重要)
說明:
4.4. WebSecurityConfig(重要)
4.5. 自定義登錄頁面(一般來講都是要自定義的)
自定義登錄頁面的時候,只需要準備一個登錄頁面,然後寫個Controller令其可以訪問到即可,登錄頁面表單提交的時候method一定要是post,最重要的時候action要跟訪問登錄頁面的url一樣
千萬記住了,訪問登錄頁面的時候是GET請求,表單提交的時候是POST請求,其它的就不用管了
4.6. 定義客戶端
4.7. 加載用戶
登錄賬戶
加載登錄賬戶
4.8. 驗證
當我們看到這個界面的時候,表示認證服務器配置完成
5. 兩個客戶端
5.1. Maven依賴
5.2. application.yml
這裡context-path不要設成/,不然重定向獲取code的時候回被攔截
5.3. WebSecurityConfig
說明:
5.4. MemberController
5.5. Order項目跟它是一樣的
5.6. 關於退出
退出就是清空用於與SSO客戶端建立的所有的會話,簡單的來說就是使所有端點的Session失效,如果想做得更好的話可以令Token失效,但是由於我們用的JWT,故而撤銷Token就不是那麼容易,關於這一點,在官網上也有提到:
本例中採用的方式是在退出的時候先退出業務服務器,成功以後再回調認證服務器,但是這樣有一個問題,就是需要主動依次調用各個業務服務器的logout
6. 工程結構
附上源碼:
7. 演示
8. 參考
9. 文檔
原文鏈接:
cjs是誰的名字的縮寫?
cjs是成傑思的名字縮寫。
成傑思,男,出生於江蘇鹽城,現居南京,從華僑大學中文系畢業後進入江蘇廣播電視總台工作;2002年,由他創辦的大型脫口秀節目《男生宿舍》,每天晚上22:00至23:00在FM101.1江蘇交通廣播網播出。
節目開播十年來創造了居高不下的收聽率,也吸引了聽眾群。隨着主持人袁一博、焦陽的加入,《男生宿舍》人氣逐漸變高。
人物經歷
2003年,為《男生宿舍》設計了一個子欄目,叫「樓道歌手」。
2004年4月26日,《男生宿舍》為「樓道歌手」2003年度巡迴演出比賽總冠軍王海笑舉辦個人演唱會,吸引了一些高校學生前來觀看。
2012年5月,成傑思被中華詩學研究會聘用為「中華詩學推廣大使」。
PHP視頻教程~!
你好呀
我的QQ 499015358 加我,
然後我把自己的視頻資料都傳給你,包括一個集合軟件.
希望我們共同進步.
我的博客
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/157685.html