天天看點

9.springSecurity整合OAuth2結合Jwt實作單點登入

源碼請看:https://gitee.com/kuzongfan/sso.git倉庫分支的ssoByOAuth2AndJwt

1.總結:昨天主要是繼續完善OAuth2配合将問題完成單點登入,昨天也應證了一個認證服務,兩個用戶端服務在登陸一次後可以通路兩個用戶端的頁面,也算是完成了單點登入

2.具體實作

  1. 首先是使用java解析jwt,在我們的controller的函數中定義request參數,根據request參數擷取其頭部的“Authorization”鍵來得到其頭部,再使用字元串分割得到頭部的token,最後根據密鑰,token擷取使用者資訊
  2. 在我們實際的項目中,我們的token會設定失效時間,這個時候就需要添加重新整理令牌,當然重新整理令牌也可以添加失效時間,用來保護token
  3. springsecurityOAuth2整合jwt:首先建立一個用戶端,導入之前的springboot和springcloud的融合依賴,重點是它的parent包,不然會報錯版本錯誤;然後去在用戶端的啟動類上面添加@EnableOAuthSso開啟單點登入,再去AuthorizationServerConfig中添加自動授權配置,以及一個單點登入必須的身份認證才能擷取密鑰的beansecurity.tokenKeyAccess("isAuthoticated()")

3.反思:在之前的Jwt實作單點登入的時候主要還是沒有明白它怎麼實作的,在這次的OAuth中體驗出了單點登入的特性,但是有些還是需要完善的,比如jwt加密這個問題,以及通過資料庫來實作登入,而不是自己模仿資料;自己現在知識來那個還不夠,要多實踐才能明白;多去敲單點登入相關代碼,最後再綜合起來實作比較完善的單點登入

4.複盤:這幾天主要是實作了以OAuth2結合Jwt來實作單點登入;

  1. 首先是OAuth2 實作單點登入有幾種模式,主要的就是授權碼模式、密碼模式;
  2. 授權碼模式:使用者通路資源伺服器,資源伺服器會給他一個授權碼,使用者拿着授權碼去認證伺服器擷取token,再使用token去通路資源伺服器;
  3. 密碼模式:使用者通過使用者名和密碼擷取token去通路資源伺服器
  4. 在OAuth中AuthorizationServerConfig中主要配置用戶端ID,以及密鑰,授權範圍以及類型,token有效期以及重定向位址;再就是單點登入需要的擷取密鑰的身份認證
  5. 在ResourceServerConfig中需要授權和認證通路請求,以及通路資源的路徑
  6. 在SecurityConfig中要授權認證通路請求,以及其他的表單送出等等公共的
  7. 在JwtTokenStoreConfig中主要配置Jwt存儲token的生成以及轉化為jwtToken

繼續閱讀