--- title: '01-Spring Security 起手勢' disqus: hackmd --- ###### tags: `Spring Security` 01-Spring Security 起手勢 === [TOC] ## 引言 > 在web應用開發中,安全無疑是十分重要的,Spring Security設計被用來保護web應用。Spring Security 是spring項目之中的一個安全模組,可以非常方便與spring項目無縫集成。特別是在spring boot項目中加入spring security更是十分簡單。 * 起源:Spring Security 小程序基礎於Acegi Security,該基礎可基於該Spring 的企業應用程序提供更靈活的安全訪問控制解決方案,並且框架充分利用Spring 的IoC 和AOP 功能,提供聲明式安全訪問控制的功能 一次,隨著這個項目的發展,Acegi Security 成為了Sring的子項目,後來被稱為“Spring Security”。 ## Spring Security是什麼 * Spring Security 是一個功能強大且高度可定制的身份驗證和訪問控制框架。它是保護基於 Spring 的應用程序的事實上的標準。 * Spring Security 是一個專注於為 Java 應用程序提供身份驗證和授權的框架。 與所有Spring 項目一樣,Spring Security 的真正強大之處在於它可以輕鬆擴展以滿足自定義要求。 * Spring Security是一個提供認證與授權的軟體架構,使用它不但可免於session fixation, clickjacking, cross site request forgery, 等攻擊,也會自動加上Http security header,且與Spring MVC有良好的整合。 ## 核心功能 對於一個權限管理框架而言,最最核心的功能,無非就是: * 認證(你是誰) * 授權(你能幹什麼) * 攻擊防護(防止偽造身份) ## Spring Security 支持多種不同的認證方式 * HTTP BASIC authentication headers:基於IETF RFC 標準 * HTTP Digest authentication headers:基於IETF RFC 標準 * HTTP X.509 client certificate exchange:基於IETF RFC 標準 * LDAP:跨平台身份驗證 * Form-based authentication:基於表單的身份驗證 * Run-as authentication:用戶用戶臨時以某一個身份登錄 * OpenID authentication:去中心化認證 ## 運作基本原理 > Spring Security提供了很多過濾器,它們攔截Servlet請求,並將這些請求轉交給認證處理過濾器和訪問決策過濾器進行處理,並強制安全性認證使用者身份和使用者許可權以達到保護WEB資源的目的。 DelegatingFilterProxy=》FilterChainProxy=》XXX的Filter=》......=》Controller ![Request basic flow](https://i.imgur.com/TUEUNBW.png) ![Spring Security Provide Filters](https://i.imgur.com/RuIeJpC.png) ## 主題式用法 * Hello World * 基本帳號密碼驗證保護Web application * 帳號密碼加解密 * Spring Security結合OAuth2.0 ## 參考來源 * [Project Spring Security 官方文件](https://spring.io/projects/spring-security#learn) * [Spring Security Reference](https://docs.spring.io/spring-security/site/docs/5.5.3/reference/html5/) * [Samples catalog 官方範例](https://github.com/spring-projects/spring-security-samples/tree/main)