iT邦幫忙

2021 iThome 鐵人賽

DAY 24
1

Spring Security 是Spring 官方建議的驗證框架,提供了安全性方面的解決方案,這個部分應該是學習Spring Boot 很重要的一環,Spring Security 的功能很強大但也很複雜,它幾乎將所有的元件都抽象化,以至於無法很直觀的了解,這系列文的最後幾篇打算詳細介紹Spring Security,但本人也還是在學習Spring Security 的階段,如果有講錯的地方還請見諒。

Spring Security 介紹

保護Web 資源的最好辦法是使用Filter,保護方法呼叫的最好辦法是使用Spring AOP,而Spring Security 則是為基於J2EE 開發的企業應用軟體提供了根據Filter 和Spring AOP 設計的安全性框架,對存取權限進行驗證(Authentication)和授權(Authorization),它對Web 安全性的支持主要依賴於大量的Filter,Filter 攔截請求並將請求轉給認證和訪問決策管理器處理,並強制安全性認證使用者身分和使用者許可權,從而增強安全性以達到保護Web 資源的目的。
除了正常的認證和授權外,它還提供了ACLs、LDAP、JAAS、CAS 等進階特性以滿足複雜環境下的安全需求。

核心概念

Spring Security 有三個核心概念。

  1. Principle : 代表使用者的物件,使用者並不僅是用戶,也可以是裝置或可以在應用程式中執行某種操作的其他系統。
  2. Authority : 代表使用者的角色,在一個系統中,系統會為不同的使用者分配不同的角色,每個使用者都應該有一種角色,如管理員、收費會員或一般會員,而不同的角色所擁有的許可權是不同的。
  3. Permission : 代表授權,對使用者的角色所擁有的許可權進行敘述。

驗證和授權

對安全性的管理主要分為驗證(Authentication)和授權(Authorization)兩個部分。

  1. Authentication : 即驗證,指的是建立Principle 的過程,支援主流的驗證方式,如HTTP 基本認證、HTTP 表單驗證、HTTP 摘要認證、OpenID 和LDAP 等。
    一般要求使用者提供使用者名稱和密碼,系統透過驗證使用者名稱和密碼的正確性來完成驗證的過程。
  2. Authorization : 即授權,它判斷某個Principle 在應用程式中是否可以執行某個操作,在進行授權判斷前,要求其所要使用到的規則必須在驗證過程中就建立好了。

核心物件

  1. Authentication : 包含Principal、Credentials 和Authorities 的一個物件,其中Principal和Credentials 會因不同的Authentication 而有不同的定義。
    如登入時,Principal 通常會是登入的Username,而Credentials 則會是登入的Password,若是使用Token 時,Credentials 則可能是Token。
  2. GrantedAuthority : Authentication 中的Authorities 是一個GrantedAuthority 數組,設置被賦予的最高權限,權限是用字串定義,所有的權限字串都用ROLE_ 作為前綴。
  3. SecurityContext : 一個驗證過的Authentication 物件。
  4. SecurityContextHolder : 用來儲存驗證過的Authentication ,也就是負責管理SecurityContext
  5. AuthenticationManager : 用於定義Spring Security 的Filter 如何執行身分驗證的API。
  6. AuthenticationProvider : 用於執行特定類型的身分驗證,如DaoAuthenticationProvider 用於使用者名稱和密碼的身分驗證,而JwtAuthenticationProvider 用於對JWT 令牌進行身分驗證。
  7. ProviderManager : AuthenticationManager 最常用的實作類別,負責管理AuthenticationProvider
  8. UserDetails : 作為封裝使用者資訊的物件,包含使用者名稱、密碼、權限等。
  9. UserDetailsService : 用來載入使用者資訊,Spring Security 進行安全驗證時收到輸入請求中的使用者名稱,會呼叫UserDetailsService 中的loadUserByUsername() 方法去尋找相應的使用者資訊,並封裝成UserDetails 物件。

參考網站

Spring Security Reference


上一篇
Day 23 - Spring AOP
下一篇
Day 25 - Spring Security (二) UserDetailsService
系列文
誤打誤撞學了Spring Boot 還當了後端工程師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言