1. 程式人生 > >基於spring-security-oauth2搭建授權服務器(一)

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

常用 遊戲 安全性 獲取 部分 tools token 界面 作者

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

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

涉及知識點:

l Oauht2基礎知識

(授權類型,運行流程)

l SpringBoot項目增加https支持(https協議簡單概述)

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

l Springsecurity知識(spring-security-oauth2是基於springsecurit的,很多配置相關都是沿用springsecurity的)

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

Oauht2基礎知識

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

核心角色介紹

l 三方客戶端

l 資源所有者

l 認證服務器

l 資源服務器

為了便於理解,這裏舉一個大家耳熟能詳的應用場景來介紹各個角色在實際應用中是如何交互的:在一個愉快的周六午後,小明同學吃完午飯就迫不及待的躺在床上,拿起手機打開吃雞遊戲(三方客戶端),為了便於同朋友開黑,小明選擇了微信登陸的方式,這時候吃雞遊戲(三方客戶端)跳轉到一個微信登陸認證頁面(認證服務器),在這裏小明(資源所有者)輸入賬號密碼(身份認證),登陸成功後界面上顯示:是否授權使吃雞遊戲可以訪問你的微信頭像、昵稱、好友資料等。(授權)。授權通過後,剩下是後臺處理,用戶不可見(返回給客戶端一個授權碼,客戶端拿到授權碼結合開始申請授權時的appkey申請token,通過後客戶端憑著這個token去資源服務器獲取用戶頭像、昵稱等信息)

客戶端的授權模式

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

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

授權碼模式:安全性最高,也是比較常用的方式,但是整個流程最長。運行流程見上面舉的“吃雞”遊戲登陸授權例子。

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

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

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

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