基於spring-security-oauth2搭建受權服務器(一)

 

背景:須要API網關控制權限,單點登錄。

當前關於這方面的系統資料較少,所以大可能是找尋網上零散的示例解析,結合官方文檔中的demo再加上源碼跟蹤調試來進行學習與搭建。但因爲涉及的知識點較多,且零散示例中配置或實現方式各有不一樣,做者常常只會記錄關鍵、核心部份內容,所以會漏掉一些基礎配置信息,給初學者帶來極大困難。每每按照多個示例拼湊出來的demo沒法正常運行,或者不明就裏。官方給出的文檔又須要具有必定英文功底。綜合以上因素,這篇文章橫空出世:)既包含周邊理論知識淺析,又包含實際案例demo完整代碼(爲了保證下載便可正常運行已附上SQL語句)html

 

涉及知識點:spring

Oauht2基礎知識(受權類型,運行流程)安全

SpringBoot項目增長https支持(https協議簡單概述)服務器

Keytools工具基本使用(經常使用命令參數解析及證書類別)微信

Springsecurity知識(spring-security-oauth2是基於springsecurit的,不少配置相關都是沿用springsecurity的)app

具體項目實現(包含服務端及客戶端具體實現,鑑權、SSO)工具

 

 

Oauht2基礎知識

既然是要搭建基於spring-security-oauth2的受權服務器,那Oauth2的基礎原理和運行流程咱們仍是須要了解一下的,不然對於受權模式選擇和認證受權流程會比較暈。對於Oauth2的介紹這裏強烈推薦: 理解OAuth2.0,在這裏只簡單描述和摘抄部分關鍵信息。學習

核心角色介紹調試

三方客戶端code

資源全部者

認證服務器

資源服務器

爲了便於理解,這裏舉一個你們耳熟能詳的應用場景來介紹各個角色在實際應用中是如何交互的:在一個愉快的週六午後,小明同窗吃完午餐就火燒眉毛的躺在牀上,拿起手機打開吃雞遊戲(三方客戶端),爲了便於同朋友開黑,小明選擇了微信登錄的方式,這時候吃雞遊戲(三方客戶端)跳轉到一個微信登錄認證頁面(認證服務器),在這裏小明(資源全部者)輸入帳號密碼(身份認證),登錄成功後界面上顯示:是否受權使吃雞遊戲能夠訪問你的微信頭像、暱稱、好友資料等。(受權)。受權經過後,剩下是後臺處理,用戶不可見(返回給客戶端一個受權碼,客戶端拿到受權碼結合開始申請受權時的appkey申請token,經過後客戶端憑着這個token去資源服務器獲取用戶頭像、暱稱等信息)

 

客戶端的受權模式

  • 受權碼模式(authorization code)
  • 簡化模式(implicit)
  • 密碼模式(resource owner password credentials)
  • 客戶端模式(client credentials)

關於這4種受權模式的區別,詳細內容請參見OAuth2.0,在這裏我給出了本身比較土的解釋:

受權碼模式:安全性最高,也是比較經常使用的方式,可是整個流程最長。運行流程見上面舉的「吃雞」遊戲登錄受權例子。

簡化模式: 跳過了獲取受權碼的環節,後續流程同受權碼模式。

密碼模式:把帳號密碼給到客戶端程序,由客戶端程序去請求認證服務器獲取token,這種方式客戶端是可以獲取到用戶名、密碼信息的。

客戶端模式:這種其實就和用戶受權沒什麼關係,須要認證的主體是客戶端自己了,客戶端自己以本身的名義去找認證服務器要受權。

相關文章
相關標籤/搜索