內容簡介
本書深入探討OAuth的運行機制,詳細介紹如何在不安全的網路環境下正確使用、部署OAuth,確保全全認證,是目前關於OAuth全面深入的參考資料。書中內容分為四大部分,分別概述OAuth 2.0協定,如何構建一個完整的OAuth 2.0生態系統,OAuth 2.0生態系統中各個部分可能出現的漏洞及其如何規避,以及更外圍生態系統中的標準和規範。
圖書目錄
第 一部分 起步
第 1章 OAuth 2.0是什麼,為什麼要關心它 2
1.1 OAuth 2.0是什麼 2
1.2 黑暗的舊時代:憑據共享與憑據盜用 5
1.3 授權訪問 9
1.3.1 超越HTTP 基本認證協定和密碼共享反模式 10
1.3.2 授權委託:重要性及套用 11
1.3.3 用戶主導的安全與用戶的選擇 12
1.4 OAuth 2.0:優點、缺點和醜陋的方面 13
1.5 OAuth 2.0 不能做什麼 15
1.6 小結 16
第 2章 OAuth之舞 17
2.1 OAuth 2.0協定概覽:獲取和使用令牌 17
2.2 OAuth 2.0授權許可的完整過程 17
2.3 OAuth中的角色:客戶端、授權伺服器、資源擁有者、受保護資源 25
2.4 OAuth的組件:令牌、許可權範圍和授權許可 27
2.4.1 訪問令牌 27
2.4.2 許可權範圍 27
2.4.3 刷新令牌 27
2.4.4 授權許可 28
2.5 OAuth的角色與組件間的互動:後端信道、前端信道和端點 29
2.5.1 後端信道通信 29
2.5.2 前端信道通信 30
2.6 小結 32
第二部分 構建OAuth環境
第3章 構建簡單的OAuth客戶端 34
3.1 向授權伺服器註冊OAuth客戶端 34
3.2 使用授權碼許可類型獲取令牌 36
3.2.1 傳送授權請求 37
3.2.2 處理授權回響 39
3.2.3 使用state參數添加跨站保護 40
3.3 使用令牌訪問受保護資源 41
3.4 刷新訪問令牌 43
3.5 小結 47
第4章 構建簡單的OAuth受保護資源 48
4.2 根據數據存儲驗證令牌 50
4.3 根據令牌提供內容 53
4.3.1 不同的許可權範圍對應不同的操作 54
4.3.2 不同的許可權範圍對應不同的數據結果 56
4.3.3 不同的用戶對應不同的數據結果 58
4.3.4 額外的訪問控制 61
4.4 小結 61
第5章 構建簡單的OAuth授權伺服器 62
5.1 管理OAuth客戶端註冊 62
5.2 對客戶端授權 64
5.2.1 授權端點 64
5.2.2 客戶端授權 66
5.3 令牌頒發 68
5.3.1 對客戶端進行身份認證 69
5.3.2 處理授權許可請求 70
5.4 支持刷新令牌 72
5.5 增加授權範圍的支持 74
5.6 小結 77
第6章 現實世界中的OAuth 2.0 78
6.1 授權許可類型 78
6.1.1 隱式許可類型 79
6.1.2 客戶端憑據許可類型 81
6.1.3 資源擁有者憑據許可類型 85
6.1.4 斷言許可類型 89
6.1.5 選擇合適的許可類型 91
6.2 客戶端部署 92
6.2.1 Web套用 93
6.2.2 瀏覽器套用 93
6.2.3 原生套用 94
6.2.4 處理密鑰 99
6.3 小結 100
第三部分 OAuth 2.0的實現與漏洞
第7章 常見的客戶端漏洞 102
7.1 常規客戶端安全 102
7.2 針對客戶端的CSRF攻擊 103
7.3 客戶端憑據失竊 105
7.4 客戶端重定向URI註冊 107
7.4.1 通過Referrer盜取授權碼 108
7.4.2 通過開放重定向器盜取令牌 111
7.5 授權碼失竊 113
7.6 令牌失竊 114
7.7 原生套用最佳實踐 115
7.8 小結 116
第8章 常見的受保護資源漏洞 117
8.1 受保護資源會受到什麼攻擊 117
8.2 受保護資源端點設計 118
8.2.1 如何保護資源端點 118
8.2.2 支持隱式許可 126
8.3 令牌重放 128
8.4 小結 130
第9章 常見的授權伺服器漏洞 131
9.1 常規安全 131
9.2 會話劫持 131
9.3 重定向URI篡改 134
9.4 客戶端假冒 138
9.5 開放重定向器 140
9.6 小結 142
第 10章 常見的OAuth令牌漏洞 143
10.1 什麼是bearer令牌 143
10.2 使用bearer令牌的風險及注意事項 144
10.3 如何保護bearer令牌 145
10.3.1 在客戶端上 145
10.3.2 在授權伺服器上 146
10.3.3 在受保護資源上 146
10.4 授權碼 147
10.5 小結 152
第四部分 更進一步
第 11章 OAuth令牌 154
11.1 OAuth令牌是什麼 154
11.2 結構化令牌:JWT 155
11.2.1 JWT的結構 156
11.2.2 JWT聲明 157
11.2.3 在伺服器上實現JWT 158
11.3 令牌的加密保護:JOSE 160
11.3.1 使用HS256的對稱簽名 161
11.3.2 使用RS256 的非對稱簽名 162
11.3.3 其他令牌保護方法 165
11.4 線上獲取令牌信息:令牌內省 166
11.4.1 內省協定 167
11.4.2 構建內省端點 168
11.4.3 發起令牌內省請求 170
11.4.4 將內省與JWT結合 171
11.5 支持令牌撤回的令牌生命周期管理 172
11.5.1 令牌撤回協定 172
11.5.2 實現令牌撤回端點 173
11.5.3 發起令牌撤回請求 174
11.6 OAuth 令牌的生命周期 175
11.7 小結 177
第 12章 動態客戶端註冊 178
12.1 伺服器如何識別客戶端 178
12.2 運行時的客戶端註冊 179
12.2.1 協定的工作原理 180
12.2.2 為什麼要使用動態註冊 181
12.2.3 實現註冊端點 183
12.2.4 實現客戶端自行註冊 186
12.3 客戶端元數據 188
12.3.1 核心客戶端元數據欄位名表 188
12.3.2 可讀的客戶端元數據國際化 190
12.3.3 軟體聲明 191
12.4 管理動態註冊的客戶端 192
12.4.1 管理協定的工作原理 193
12.4.2 實現動態客戶端註冊管理API 195
12.5 小結 202
第 13章 將OAuth 2.0用於用戶身份認證 203
13.1 為什麼OAuth 2.0不是身份認證協定 203
13.2 OAuth到身份認證協定的映射 205
13.3 OAuth 2.0是如何使用身份認證的 207
13.4 使用OAuth 2.0進行身份認證的常見陷阱 208
13.4.1 將訪問令牌作為身份認證的證明 208
13.4.2 將對受保護API的訪問作為身份認證的證明 209
13.4.3 訪問令牌注入 209
13.4.4 缺乏目標客群限制 210
13.4.5 無效用戶信息注入 210
13.4.6 不同身份提供者的協定各不相同 210
13.5 OpenID Connect:一個基於OAuth 2.0的認證和身份標準 210
13.5.1 ID令牌 211
13.5.2 UserInfo端點 212
13.5.3 動態伺服器發現與客戶端註冊 214
13.5.4 與OAuth 2.0的兼容性 216
13.5.5 高級功能 216
13.6 構建一個簡單的OpenID Connect系統 217
13.6.1 生成ID 令牌 217
13.6.2 創建UserInfo 端點 219
13.6.3 解析ID 令牌 221
13.6.4 獲取UserInfo 222
13.7 小結 224
第 14章 使用OAuth 2.0的協定和配置規範 225
14.1 UMA 225
14.1.1 UMA的重要性 226
14.1.2 UMA協定的工作原理 227
14.2 HEART 237
14.2.1 HEART的重要性 237
14.2.2 HEART規範 238
14.2.3 HEART機制維度的配置規範 238
14.2.4 HEART 語義維度的配置規範 239
14.3 iGov 239
14.3.1 iGov的重要性 240
14.3.2 iGov展望 240
14.4 小結 240
第 15章 bearer令牌以外的選擇 241
15.1 為什麼不能滿足於bearer令牌 241
15.2 PoP令牌 242
15.2.1 PoP令牌的請求與頒發 245
15.2.2 在受保護資源上使用PoP令牌 246
15.2.3 驗證PoP令牌請求 246
15.3 PoP令牌實現 247
15.3.1 頒發令牌和密鑰 247
15.3.2 生成簽名頭部並傳送給受保護資源 249
15.3.3 解析頭部、內省令牌並驗證簽名 250
15.4 TLS令牌綁定 252
15.5 小結 254
第 16章 歸納總結 255
16.1 正確的工具 255
16.2 做出關鍵決策 256
16.3 更大範圍的生態系統 257
16.4 社區 257
16.5 未來 258
16.6 小結 259
附錄A 代碼框架介紹 260
附錄B 補充代碼清單 265