第一部分 起 步
第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.1 解析HTTP請求中的OAuth令牌 49
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
· · · · · · (
收起)