本書深入探討OAuth的運行機制,詳細介紹如何在不安全的網(wǎng)絡(luò)環(huán)境下正確使用、部署OAuth,確保安全認證,是目前關(guān)于OAuth全面深入的參考資料。書中內(nèi)容分為四大部分,分別概述OAuth 2.0協(xié)議,如何構(gòu)建一個完整的OAuth 2.0生態(tài)系統(tǒng),OAuth 2.0生態(tài)系統(tǒng)中各個部分可能出現(xiàn)的漏洞及其如何規(guī)避,以及更外圍生態(tài)系統(tǒng)中的標準和規(guī)范。
OAuth是互聯(lián)網(wǎng)公司廣泛使用的協(xié)議,守護著全球不計其數(shù)的Web API。本書從實戰(zhàn)角度出發(fā),帶你領(lǐng)略O(shè)Auth生態(tài)系統(tǒng)的秀美風光,并學(xué)會自己構(gòu)建安全的客戶端、受保護資源和服務(wù)器,透徹理解OAuth 2的實現(xiàn)和部署流程,不僅知其然,還知其所以然。
本書重點講解以下內(nèi)容:
- OAuth 2的設(shè)計理念和重要性;
- 構(gòu)建OAuth 2生態(tài)系統(tǒng);
- OAuth 2生態(tài)系統(tǒng)的常見漏洞;
- 針對OAuth令牌的常見攻擊;
- 動態(tài)客戶端注冊。
“非常實用,告訴我們什么該做,什么不該做。”——Ian Glazer,Salesforce公司身份管理總監(jiān)
“這本書的深度和廣度令人折服,推薦所有Web開發(fā)人員都看看。”——Thomas O'Rourke,軟件工程師
“內(nèi)容簡潔、結(jié)構(gòu)清晰,讓我對OAuth有了透徹了解!薄猂oy Folkker,***讀者
【作者介紹】
賈斯廷·里徹(Justin Richer),系統(tǒng)架構(gòu)師、軟件工程師,OAuth工作組重要成員,深度參與了OAuth 2核心規(guī)范的制定,任多個擴展規(guī)范的技術(shù)編輯,并領(lǐng)導(dǎo)開發(fā)了基于OAuth的服務(wù)端與客戶端套件MITREid Connect。
安東尼奧·桑索(Antonio Sanso),就職于Adobe公司,長期從事安全研究工作。應(yīng)用密碼學(xué)博士,持有多項Web技術(shù)專利。
【譯者介紹】
楊鵬,畢業(yè)于四川大學(xué)電子信息學(xué)院信息安全研究所,目前從事Web前端開發(fā),同時廣泛涉獵各技術(shù)領(lǐng)域。
第 一部分 起步
第 1章 OAuth 2.0是什么,為什么要關(guān)心它 2
1.1 OAuth 2.0是什么 2
1.2 黑暗的舊時代:憑據(jù)共享與憑據(jù)盜用 5
1.3 授權(quán)訪問 9
1.3.1 超越HTTP 基本認證協(xié)議和密碼共享反模式 10
1.3.2 授權(quán)委托:重要性及應(yīng)用 11
1.3.3 用戶主導(dǎo)的安全與用戶的選擇 12
1.4 OAuth 2.0:優(yōu)點、缺點和丑陋的方面 13
1.5 OAuth 2.0 不能做什么 15
1.6 小結(jié) 16
第 2章 OAuth之舞 17
2.1 OAuth 2.0協(xié)議概覽:獲取和使用令牌 17
2.2 OAuth 2.0授權(quán)許可的完整過程 17
2.3 OAuth中的角色:客戶端、授權(quán)服務(wù)器、資源擁有者、受保護資源 25
2.4 OAuth的組件:令牌、權(quán)限范圍和授權(quán)許可 27
2.4.1 訪問令牌 27
2.4.2 權(quán)限范圍 27
2.4.3 刷新令牌 27
2.4.4 授權(quán)許可 28
2.5 OAuth的角色與組件間的交互:后端信道、前端信道和端點 29
2.5.1 后端信道通信 29
2.5.2 前端信道通信 30
2.6 小結(jié) 32
第二部分 構(gòu)建OAuth環(huán)境
第3章 構(gòu)建簡單的OAuth客戶端 34
3.1 向授權(quán)服務(wù)器注冊O(shè)Auth客戶端 34
3.2 使用授權(quán)碼許可類型獲取令牌 36
3.2.1 發(fā)送授權(quán)請求 37
3.2.2 處理授權(quán)響應(yīng) 39
3.2.3 使用state參數(shù)添加跨站保護 40
3.3 使用令牌訪問受保護資源 41
3.4 刷新訪問令牌 43
3.5 小結(jié) 47
第4章 構(gòu)建簡單的OAuth受保護資源 48
4.1 解析HTTP請求中的OAuth令牌 49
4.2 根據(jù)數(shù)據(jù)存儲驗證令牌 50
4.3 根據(jù)令牌提供內(nèi)容 53
4.3.1 不同的權(quán)限范圍對應(yīng)不同的操作 54
4.3.2 不同的權(quán)限范圍對應(yīng)不同的數(shù)據(jù)結(jié)果 56
4.3.3 不同的用戶對應(yīng)不同的數(shù)據(jù)結(jié)果 58
4.3.4 額外的訪問控制 61
4.4 小結(jié) 61
第5章 構(gòu)建簡單的OAuth授權(quán)服務(wù)器 62
5.1 管理OAuth客戶端注冊 62
5.2 對客戶端授權(quán) 64
5.2.1 授權(quán)端點 64
5.2.2 客戶端授權(quán) 66
5.3 令牌頒發(fā) 68
5.3.1 對客戶端進行身份認證 69
5.3.2 處理授權(quán)許可請求 70
5.4 支持刷新令牌 72
5.5 增加授權(quán)范圍的支持 74
5.6 小結(jié) 77
第6章 現(xiàn)實世界中的OAuth 2.0 78
6.1 授權(quán)許可類型 78
6.1.1 隱式許可類型 79
6.1.2 客戶端憑據(jù)許可類型 81
6.1.3 資源擁有者憑據(jù)許可類型 85
6.1.4 斷言許可類型 89
6.1.5 選擇合適的許可類型 91
6.2 客戶端部署 92
6.2.1 Web應(yīng)用 93
6.2.2 瀏覽器應(yīng)用 93
6.2.3 原生應(yīng)用 94
6.2.4 處理密鑰 99
6.3 小結(jié) 100
第三部分 OAuth 2.0的實現(xiàn)與漏洞
第7章 常見的客戶端漏洞 102
7.1 常規(guī)客戶端安全 102
7.2 針對客戶端的CSRF攻擊 103
7.3 客戶端憑據(jù)失竊 105
7.4 客戶端重定向URI注冊 107
7.4.1 通過Referrer盜取授權(quán)碼 108
7.4.2 通過開放重定向器盜取令牌 111
7.5 授權(quán)碼失竊 113
7.6 令牌失竊 114
7.7 原生應(yīng)用最佳實踐 115
7.8 小結(jié) 116
第8章 常見的受保護資源漏洞 117
8.1 受保護資源會受到什么攻擊 117
8.2 受保護資源端點設(shè)計 118
8.2.1 如何保護資源端點 118
8.2.2 支持隱式許可 126
8.3 令牌重放 128
8.4 小結(jié) 130
第9章 常見的授權(quán)服務(wù)器漏洞 131
9.1 常規(guī)安全 131
9.2 會話劫持 131
9.3 重定向URI篡改 134
9.4 客戶端假冒 138
9.5 開放重定向器 140
9.6 小結(jié) 142
第 10章 常見的OAuth令牌漏洞 143
10.1 什么是bearer令牌 143
10.2 使用bearer令牌的風險及注意事項 144
10.3 如何保護bearer令牌 145
10.3.1 在客戶端上 145
10.3.2 在授權(quán)服務(wù)器上 146
10.3.3 在受保護資源上 146
10.4 授權(quán)碼 147
10.5 小結(jié) 152
第四部分 更進一步
第 11章 OAuth令牌 154
11.1 OAuth令牌是什么 154
11.2 結(jié)構(gòu)化令牌:JWT 155
11.2.1 JWT的結(jié)構(gòu) 156
11.2.2 JWT聲明 157
11.2.3 在服務(wù)器上實現(xiàn)JWT 158
11.3 令牌的加密保護:JOSE 160
11.3.1 使用HS256的對稱簽名 161
11.3.2 使用RS256 的非對稱簽名 162
11.3.3 其他令牌保護方法 165
11.4 在線獲取令牌信息:令牌內(nèi)省 166
11.4.1 內(nèi)省協(xié)議 167
11.4.2 構(gòu)建內(nèi)省端點 168
11.4.3 發(fā)起令牌內(nèi)省請求 170
11.4.4 將內(nèi)省與JWT結(jié)合 171
11.5 支持令牌撤回的令牌生命周期管理 172
11.5.1 令牌撤回協(xié)議 172
11.5.2 實現(xiàn)令牌撤回端點 173
11.5.3 發(fā)起令牌撤回請求 174
11.6 OAuth 令牌的生命周期 175
11.7 小結(jié) 177
第 12章 動態(tài)客戶端注冊 178
12.1 服務(wù)器如何識別客戶端 178
12.2 運行時的客戶端注冊 179
12.2.1 協(xié)議的工作原理 180
12.2.2 為什么要使用動態(tài)注冊 181
12.2.3 實現(xiàn)注冊端點 183
12.2.4 實現(xiàn)客戶端自行注冊 186
12.3 客戶端元數(shù)據(jù) 188
12.3.1 核心客戶端元數(shù)據(jù)字段名表 188
12.3.2 可讀的客戶端元數(shù)據(jù)國際化 190
12.3.3 軟件聲明 191
12.4 管理動態(tài)注冊的客戶端 192
12.4.1 管理協(xié)議的工作原理 193
12.4.2 實現(xiàn)動態(tài)客戶端注冊管理API 195
12.5 小結(jié) 202
第 13章 將OAuth 2.0用于用戶身份認證 203
13.1 為什么OAuth 2.0不是身份認證協(xié)議 203
13.2 OAuth到身份認證協(xié)議的映射 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 不同身份提供者的協(xié)議各不相同 210
13.5 OpenID Connect:一個基于OAuth 2.0的認證和身份標準 210
13.5.1 ID令牌 211
13.5.2 UserInfo端點 212
13.5.3 動態(tài)服務(wù)器發(fā)現(xiàn)與客戶端注冊 214
13.5.4 與OAuth 2.0的兼容性 216
13.5.5 高級功能 216
13.6 構(gòu)建一個簡單的OpenID Connect系統(tǒng) 217
13.6.1 生成ID 令牌 217
13.6.2 創(chuàng)建UserInfo 端點 219
13.6.3 解析ID 令牌 221
13.6.4 獲取UserInfo 222
13.7 小結(jié) 224
第 14章 使用OAuth 2.0的協(xié)議和配置規(guī)范 225
14.1 UMA 225
14.1.1 UMA的重要性 226
14.1.2 UMA協(xié)議的工作原理 227
14.2 HEART 237
14.2.1 HEART的重要性 237
14.2.2 HEART規(guī)范 238
14.2.3 HEART機制維度的配置規(guī)范 238
14.2.4 HEART 語義維度的配置規(guī)范 239
14.3 iGov 239
14.3.1 iGov的重要性 240
14.3.2 iGov展望 240
14.4 小結(jié) 240
第 15章 bearer令牌以外的選擇 241
15.1 為什么不能滿足于bearer令牌 241
15.2 PoP令牌 242
15.2.1 PoP令牌的請求與頒發(fā) 245
15.2.2 在受保護資源上使用PoP令牌 246
15.2.3 驗證PoP令牌請求 246
15.3 PoP令牌實現(xiàn) 247
15.3.1 頒發(fā)令牌和密鑰 247
15.3.2 生成簽名頭部并發(fā)送給受保護資源 249
15.3.3 解析頭部、內(nèi)省令牌并驗證簽名 250
15.4 TLS令牌綁定 252
15.5 小結(jié) 254
第 16章 歸納總結(jié) 255
16.1 正確的工具 255
16.2 做出關(guān)鍵決策 256
16.3 更大范圍的生態(tài)系統(tǒng) 257
16.4 社區(qū) 257
16.5 未來 258
16.6 小結(jié) 259
附錄A 代碼框架介紹 260
附錄B 補充代碼清單 265