spring security 5 oauth2認證服務器開發

原文地址

spring security 相關技術選型:

由於 spring security 使用廣度不及 spring boot,且 spring 這兩年廢棄了許多項目,spring 的術語和稱呼都有一些改變。
網上看到的一些教程大多是過時的,2019年之前的文章、教程大都跟不上最新的潮流,2019的文章和教程大部分又是轉載的前幾年的,因此需要看 spring 官方文檔。
由於 spring 官方看起來也需要時間,因此特作此說明,以減少各位技術leader和愛好者們在項目的技術選型中花費的時間。

先上結論:

  • 優先選擇 Spring 官方推薦的 spring security 5.2.x +
  • 生產環境版本優先選擇次最新版的最新的 SR,如當前最新是 H 版本,用於生產則最好使用 G 版本的最新一次 SR(官方標註GA的版本)

我的猜測:Spring 官方未來會廢棄一切與 security 相關的子項目並遷移至 Spring Security 中,
未來想在 Spring 中尋找與 security 相關的部分,只需學習 spring security 即可。

  • 在 spring security5.3.x 前可以選擇使用 spring-security-oauth(一年內不會被淘汰,未來終將被 spring security5.x取代)

  • 不要再使用 spring-security-xxxspring-social

  • 不推薦使用 spring-cloud-starter-oauth2spring-cloud-starter-security(有計劃被廢棄)

spring-cloud-security

該工程中,包含4個模塊,一個依賴管理,一個基礎模塊,兩個 starter(spring-cloud-starter-oauth2spring-cloud-starter-security

  • 好多教程中引入了 spring-cloud-starter-oauth2spring-cloud-starter-security依賴,我要使用嗎?
  • 查看 spring-cloud-security 發佈規劃
    得知 spring-cloud-starter-oauth2spring-cloud-starter-security 在2.2.1版本(對應 spring-cloud Hoxton.SR2)將廢棄,因此不再建議使用,

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-S8BgwCqO-1580873604043)(img/spring-cloud-security-1.png)]

既然兩個starter都沒了,除了依賴管理模塊,只剩一個spring-cloud-security,那麼要不要繼續使用 spring-cloud-security 呢?
看一下他的源碼
發現其實該模塊就提供了3個功能,也沒幾個類,因此即使依賴也沒有任何關係,也十分容易遷移或者適配,
所以我的建議是無所謂,
雖然可以預見到,Spring官方未來會廢棄一切與 security 相關的子項目並遷移至 Spring Security 中,
但spring 官方還沒有正式出廢棄 spring-cloud-security 的通知,
也沒出遷移 spring-cloud-security 到 spring-security 5.2.x 的說明文檔,
況且它本身的代碼和功能不多,暫時使用也無妨。

spring-security-xxx 系列

結論:該系列項目均停止維護,新項目中直接考慮使用 spring-security 5.2.x+即可,因爲這些項目提供的主要功能集成進 spring security 中了
github: spring-security 5.2.0.RELEASE

spring-security-oauth

該項目是spring-security-xxx 系列中使用最廣的項目,2年前 spring-security-oauth 是 spring 提供的 oauth 的解決方案,爲什麼現在不推薦使用了呢?

該項目提供的能力逐漸由 spring-security 下的 spring-security-oauth-xxx 接管

spring-security-saml

該項目是 saml 協議的一個實現
spring-security-saml爲什麼剛出1.0版本就不維護了?

  • 該項目不太活躍,被關閉了,後續會慢慢集成進 spring security 中
  • 該項目的最後一次提交是2019年11月左右

spring-security-kerberos

該項目是 kerberos 的一個實現

  • 該項目的最後一次提交是2019年2月左右,可見也早早停止維護了

spring-io/platform

該項目主要用於依賴管理,作爲 spring boot 1.x 系列的依賴管理項目,spring boot 2.x 現已經用 spring-boot-dependencies 替代

  • 2019年4月左右已經停止維護

spring-social

github上有一些基於 spring-social 實現的第三方登錄 sdk,爲什麼現在廢棄了?

  • spring-social 是與 spring-security-oauth 協同使用的模塊,提供了第三方登錄,作爲 oauth client 的角色
  • 2018.7.3 spring-social官方聲明
    • Spring Social所提供的許多功能(spring social維護者認爲是Spring Social最有價值的部分)現在已成爲Spring Security的一部分
  • 2019年7月3日停止維護支持。

spring-security 5.2.x+

spring-security 5 開始將以上部分整合,5.2版本提供了部分 oauth2 支持,以上涉及的項目被逐漸合併至 spring security 5.2 以及以後的版本中,
spring-security 5.2.x 並不能完全替代以上的項目提供的功能,只是將上面中部分主要的功能先集成進來

預計在未來 spring-security 5.3.x(5.3第一個版本大約在2020.3) 之後的版本,將可以只使用 spring-security,不需要在學習以上的其他的部分

spring-security 入門

一、基本入門

打開 官方文檔 - 熟悉 spring boot demo

demo 關鍵點傳送門

  1. 先看依賴
    需要引入的 spring security 的jar有 spring-security-config、spring-security-web 這兩個

  2. 看配置,發現不需要任何額外的配置

  3. 涉及到 spring security 的文件只有SecurityConfig.java

  • 加入註解 @EnableWebSecurity
  • 繼承 WebSecurityConfigurerAdapter
  • 配置自己的安全策略
    • .authorizeRequests 配置認證、授權
    • .formLogin 配置登錄相關
  • 注入一個 UserDetailsService,實際中一般實現這個接口,查詢數據庫。
  1. 運行這個demo查看效果
  • 發現除了登錄頁外,其他請求都無法訪問
  • 使用控制檯打印的 隨機密碼 成功登錄後都可以訪問
  • 修改 SecurityConfig 中的/user/** 的訪問權限,改爲 admin 後,發現訪問不了
  • 再修改 userDetail 的 role,改爲 admin,又可以訪問了

二、

發佈了106 篇原創文章 · 獲贊 107 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章