Spring Security 實戰 (Spring Security in Action)
內容描述
安全性是沒有任何商量餘地的。我們要依賴Spring應用程序來傳輸數據、驗證憑據和防止攻擊。採用“通過設計實現安全防護”的原則將能夠保護我們的網絡避免數據被竊取和未經授權的入侵。 《SpringSecurity實戰》展示瞭如何在造成破壞之前防止跨站腳本和請求偽造攻擊。本書將從基礎開始講解,其中將模擬密碼升級並添加多種類型的授權。隨著技能的增長,讀者將可以將Spring Security應用到新的架構中,並創建高級的OAuth2配置。完成之後,讀者將擁有一個定製的Spring Security配置,它可以保護應用程序免受常見的和特殊的威脅。 主要內容 ●對密碼進行編碼以及對用戶進行身份驗證 ●端點的安全防護 ●安全性測試的 自動化 ●設置獨立的授權服務器
目錄大綱
I部分 初 識
1 章 安全性現狀 3
1.1 Spring Security的定義與用途 4
1.2 什麼是軟件安全性 7
1.3 安全性為什麼重要 12
1.4 Web應用程序中的常見安全漏洞 13
1.4.1 身份驗證和授權中的漏洞 14
1.4.2 什麼是會話固定 15
1.4.3 什麼是跨站腳本(XSS) 16
1.4.4 什麼是跨站請求偽造(CSRF) 17
1.4.5 理解Web應用程序中的注入漏洞 18
1.4.6 應對敏感數據暴 18
1.4.7 缺乏方法訪問控制指的是什麼 21
1.4.8 使用具有已知漏洞的依賴項 23
1.5 各種架構中所應用的安全性 23
1.5.1 設計一個單體式Web應用程序 24
1.5.2 為前後端分離設計安全性 25
1.5.3 理解OAuth 2流程 27
1.5.4 使用API鍵、加密簽名和IP驗證保護請求 29
1.6 本書知識內容 30
1.7 本章小結 31
2 章 Spring Security初探 33
2.1 開始構建項目 34
2.2 默認配置有哪些 39
2.3 重寫默認配置 43
2.3.1 重寫UserDetailsService組件 44
2.3.2 重寫端點授權配置 48
2.3.3 以不同方式設置配置 50
2.3.4 重寫AuthenticationProvider實現 54
2.3.5 在項目中使用多個配置類 58
2.4 本章小結 60
Ⅱ部分 實現
3 章 管理用戶 63
3.1 在Spring Security中實現身份驗證 64
3.2 描述用戶 66
3.2.1 闡明UserDetails契約的定義 66
3.2.2 GrantedAuthority契約詳述 68
3.2.3 編寫UserDetails的小化實現 69
3.2.4 使用構造器創建UserDetails類型的實例 72
3.2.5 合併與用戶相關的多個職能 73
3.3 指示Spring Security如何管理用戶 77
3.3.1 理解UserDetailsService契約 77
3.3.2 實現UserDetailsService契約 78
3.3.3 實現UserDetailsManager契約 82
3.4 本章小結 90
4 章 密碼處理 91
4.1 理解PasswordEncoder契約 91
4.1.1 PasswordEncoder契約的定義 92
4.1.2 實現PasswordEncoder契約 93
4.1.3 從PasswordEncoder提供的實現中選擇 95
4.1.4 使用DelegatingPasswordEncoder實現多種編碼策略 98
4.2 Spring Security Crypto模塊的更多知識 102
4.2.1 使用密鑰生成器 102
4.2.2 將加密器用於加密和解密作 104
4.3 本章小結 106
5 章 實現身份驗證 107
5.1 理解AuthenticationProvider 109
5.1.1 在身份驗證期間表示請求 110
5.1.2 實現自定義身份驗證邏輯 111
5.1.3 應用自定義身份驗證邏輯 113
5.2 使用SecurityContet 117
5.2.1 將一種保持策略用於安全上下文 119
5.2.2 將保持策略用於異步調用 121
5.2.3 將保持策略用於獨立應用程序 123
5.2.4 使用DelegatingSecurityContetRunable轉發安全上下文 124
5.2.5 使用DelegatingSecurityContetEecutorService轉發安全上下文 127
5.3 理解HTTP Basic和基於表單的登錄身份驗證 129
5.3.1 使用和配置HTTP Basic 130
5.3.2 使用基於表單的登錄實現身份驗證 133
5.4 本章小結 140
6 章 動手實踐:一個小型且安全的Web應用程序 141
6.1 項目需求和設置 141
6.2 實現用戶管理 148
6.3 實現自定義身份驗證邏輯 153
6.4 實現主頁面 156
6.5 運行和測試應用程序 159
6.6 本章小結 161
7 章 配置權限:限制訪問 163
7.1 基於權限和角色限制訪問 165
7.1.1 基於用戶權限限制所有端點的訪問 167
7.1.2 基於用戶角色限制所有端點的訪問 175
7.1.3 限制對所有端點的訪問 180
7.2 本章小結 183
8 章 配置權限:應用限制 185
8.1 使用匹配器方法選擇端點 185
8.2 使用MVC匹配器選擇用於授權的請求 192
8.3 使用Ant匹配器選擇用於授權的請求 200
8.4 使用正則表達式匹配器選擇用於授權的請求 204
8.5 本章小結 210
9 章 實現過濾器 211
9.1 在Spring Security架構中實現過濾器 213
9.2 在過濾器鏈中現有過濾器之前添加過濾器 215
9.3 在過濾器鏈中已有的過濾器之後添加過濾器 219
9.4 在過濾器鏈中另一個過濾器的位置添加一個過濾器 222
9.5 Spring Security提供的Filter實現 227
9.6 本章小結 229
10 章 應用CSRF防護和CORS 231
10.1 在應用程序中應用跨站請求偽造(CSRF)防護 231
10.1.1 CSRF防護如何在Spring Security中發揮作用 232
10.1.2 在實際場景中使用CSRF防護 238
10.1.3 自定義CSRF防護 244
10.2 使用跨源資源共享 255
10.2.1 CORS的運行機制 256
10.2.2 使用@CrossOrigin註解應用CORS策略 261
10.2.3 使用CorsConfigurer應用CORS 262
10.3 本章小結 263
11 章 動手實踐:職責分離 265
11.1 示例的場景和需求 266
11.2 實現和使用令牌 269
11.2.1 令牌是什麼 269
11.2.2 JSON Web Token是什麼 272
11.3 實現身份驗證服務器 274
11.4 實現業務邏輯服務器 285
11.4.1 實現Authentication對象 290
11.4.2 實現身份驗證服務器的代理 292
11.4.3 實現AuthenticationProvider接口 295
11.4.4 實現過濾器 297
11.4.5 編寫安全性配置 304
11.4.6 測試整個系統 306
11.5 本章小結 307
12 章 OAuth 2的運行機制 309
12.1 OAuth 2框架 310
12.2 OAuth 2身份驗證架構的組件 312
12.3 使用OAuth 2的實現選項 313
12.3.1 實現授權碼授權類型 313
12.3.2 實現密碼授權類型 318
12.3.3 實現客戶端憑據授權類型 320
12.3.4 使用刷新令牌獲得新的訪問令牌 321
12.4 OAuth 2的弱點 323
12.5 實現一個簡單的單點登錄應用程序 324
12.5.1 管理授權服務器 325
12.5.2 開始實現 328
12.5.3 實現ClientRegistration 330
12.5.4 實現ClientRegistrationRepository 333
12.5.5 Spring Boot配置的純粹方式 335
12.5.6 獲取經過身份驗證的用戶的詳細信息 337
12.5.7 測試應用程序 338
12.6 本章小結 341
13 章 OAuth 2:實現授權服務器 343
13.1 編寫我們自己的授權服務器實現 345
13.2 定義用戶管理 346
13.3 向授權服務器註冊客戶端 349
13.4 使用密碼授權類型 353
13.5 使用授權碼授權類型 355
13.6 使用客戶端憑據授權類型 361
13.7 使用刷新令牌授權類型 364
13.8 本章小結 366
14 章 OAuth 2:實現資源服務器 367
14.1 實現資源服務器 369
14.2 遠程檢查令牌 372
14.3 實現帶有JdbcTokenStore的黑板模式 380
14.4 兩種方法的簡要對比 389
14.5 本章小結 390
15 章 OAuth 2:使用JWT和加密簽名 391
15.1 使用JWT以及對稱密鑰簽名的令牌 391
15.1.1 使用JWT 392
15.1.2 實現授權服務器以頒發JWT 393
15.1.3 實現使用JWT的資源服務器 398
15.2 使用通過JWT和非對稱密鑰簽名的令牌 402
15.2.1 生成密鑰對 403
15.2.2 實現使用私鑰的授權服務器 405
15.2.3 實現使用公鑰的資源服務器 407
15.2.4 使用一個暴公鑰的端點 409
15.3 將自定義詳細信息添加到JWT 413
15.3.1 配置授權服務器以便向令牌添加自定義詳細信息 414
15.3.2 配置資源服務器以讀取JWT的自定義詳細信息 416
15.4 本章小結 419
16 章 全局方法安全性:預授權和後授權 421
16.1 啟用全局方法安全性 422
16.1.1 理解調用授權 422
16.1.2 在項目中啟用全局方法安全性 425
16.2 對權限和角色應用預授權 426
16.3 應用後授權 431
16.4 實現方法的許可 436
16.5 本章小結 448
17 章 全局方法安全性:預過濾和後過濾 451
17.1 為方法權限應用預過濾 452
17.2 為方法授權應用後過濾 459
17.3 在Spring Data存儲庫中使用過濾 463
17.4 本章小結 470
18 章 動手實踐:一個OAuth 2 應用程序 471
18.1 應用程序場景 472
18.2 將Keycloak配置為授權服務器 474
18.2.1 為系統註冊一個客戶端 478
18.2.2 指定客戶端作用域 479
18.2.3 添加用戶並獲取訪問令牌 481
18.2.4 定義用戶角色
485
18.3 實現資源服務器 490
18.4 對應用程序進行測試 501
18.4.1 證明經過身份驗證的用戶只能為自己添加記錄 502
18.4.2 證明用戶只能檢索自己的記錄 504
18.4.3 證明只有管理員才能刪除記錄 505
18.5 本章小結 506
19 章 在反應式應用程序中使用Spring Security 509
19.1 什麼是反應式應用程序 510
19.2 反應式應用程序中的用戶管理 514
19.3 在反應式應用程序中配置授權規則 519
19.3.1 在反應式應用程序的端點層應用授權 520
19.3.2 在反應式應用程序中使用方法安全性 526
19.4 反應式應用程序和OAuth 2 529
19.5 本章小結 532
20 章 Spring Security測試 535
20.1 使用模擬用戶進行測試 537
20.2 使用UserDetailsService提供的用戶進行測試 545
20.3 將自定義Authentication對像用於測試 547
20.4 測試方法安全性 551
20.5 測試身份驗證 552
20.6 測試CSRF配置 556
20.7 測試CORS配置 557
20.8 測試反應式Spring Security實現 558
20.9 本章小結 561
附錄A 創建一個Spring Boot
項目 563
作者介紹
Laurenliu Spilca是Endava一位極為敬業的開發主管和培訓師,他具有十餘年的Java經驗。