本书深入探讨OAuth的运行机制,详细介绍如何在不安全的网络环境下正确使用、部署OAuth,确保安全认证,是目前关于OAuth全面深入的参考资料。书中内容分为四大部分,分别概述OAuth 2.0协议,如何构建一个完整的OAuth 2.0生态系统,OAuth 2.0生态系统中各个部分可能出现的漏洞及其如何规避,以及更外围生态系统中的标准和规范。
OAuth是互联网公司广泛使用的协议,守护着全球不计其数的Web API。本书从实战角度出发,带你领略OAuth生态系统的秀美风光,并学会自己构建安全的客户端、受保护资源和服务器,透彻理解OAuth 2的实现和部署流程,不仅知其然,还知其所以然。
本书重点讲解以下内容:
- OAuth 2的设计理念和重要性;
- 构建OAuth 2生态系统;
- OAuth 2生态系统的常见漏洞;
- 针对OAuth令牌的常见攻击;
- 动态客户端注册。
“非常实用,告诉我们什么该做,什么不该做。”——Ian Glazer,Salesforce公司身份管理总监
“这本书的深度和广度令人折服,推荐所有Web开发人员都看看。”——Thomas O'Rourke,软件工程师
“内容简洁、结构清晰,让我对OAuth有了透彻了解。”——Roy Folkker,***读者
【作者介绍】
贾斯廷·里彻(Justin Richer),系统架构师、软件工程师,OAuth工作组重要成员,深度参与了OAuth 2核心规范的制定,任多个扩展规范的技术编辑,并领导开发了基于OAuth的服务端与客户端套件MITREid Connect。
安东尼奥·桑索(Antonio Sanso),就职于Adobe公司,长期从事安全研究工作。应用密码学博士,持有多项Web技术专利。
【译者介绍】
杨鹏,毕业于四川大学电子信息学院信息安全研究所,目前从事Web前端开发,同时广泛涉猎各技术领域。
第 一部分 起步
第 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