跳转至

关于本书

本书旨在对 OAuth 2.0 协议及其周边诸多技术(包括 OpenID Connect 与 JOSE/JWT)进行系统、全面而深入的讲解。我们希望你读完后,能够真正理解 OAuth 能做什么、它为何以这样的方式运作,以及在并不安全的互联网环境中,如何正确且安全地部署它。

本书的目标读者,是那些大概率用过 OAuth 2.0(或至少听说过它),但并不真正清楚它如何工作、为何如此设计的人。也许你已经开发过一个或多个 OAuth 2.0 组件,比如用于调用某个特定 API 的客户端,但你对其他类型的客户端、或 OAuth 2.0 生态中的其他部分同样充满好奇。你可能会问:“我去请求授权码时,授权服务器到底在做什么?”又或者,你的任务是保护一个 API,你想知道 OAuth 2.0 是否真的能胜任;如果能,又该如何落地和运维?也许你在工作中负责开发客户端,但想弄明白受保护资源端拿到你发来的 token 之后会怎么处理。又或者你在构建并保护一个 API,但你想知道与你交互的授权服务器如何把这些 token 发放到正确的地方。我们希望你能真正理解 OAuth 2.0 这件工具擅长什么,以及如何高效地把它用好。

我们将默认你了解 HTTP 的基本工作方式,并且至少理解使用 TLS 加密连接的价值(即便不了解其全部细节)。本书的代码全部使用 JavaScript 编写,但本书并不是一本讲 JavaScript 的书,因此我们会尽力解释代码背后的抽象与功能含义,帮助你将其迁移并应用到自己的平台与语言中。

路线图

本书共 4 个部分、16 章。第一部分为「什么是 OAuth 2.0,以及你为什么需要关注?」和「OAuth 之舞」两章,提供 OAuth 2.0 协议概览,属于核心必读内容。第二部分为「构建一个简单的OAuth客户端」至「真实世界中的 OAuth 2.0」,展示如何构建一个完整的 OAuth 2.0 生态系统。第三部分为「常见客户端漏洞」至「常见的 OAuth 令牌漏洞」,讨论 OAuth 2.0 生态各环节可能遭遇的漏洞以及如何规避。最后一部分为「OAuth 令牌」至「总结与结语」,超越 OAuth 2.0 核心协议,延伸到更广泛的标准与规范生态,并对全书进行总结收束。

  • 「什么是 OAuth 2.0,以及你为什么需要关注?」概述 OAuth 2.0 协议及其研发动机,并介绍 OAuth 之前的 API 安全方案。
  • 「OAuth 之舞」深入讲解授权码(authorization code)授权类型——OAuth 2.0 核心授权类型中最常见、最具代表性的一种。
  • 「构建一个简单的OAuth客户端」、「构建一个简单的 OAuth 受保护资源」和「构建一个简单的 OAuth 授权服务器」分别演示如何构建一个简单但功能完整的 OAuth 2.0 客户端、受保护资源服务器与授权服务器。
  • 「真实世界中的 OAuth 2.0」探讨 OAuth 2.0 协议的多种变体,包括授权码之外的其他授权类型,以及原生应用的相关考量。
  • 「常见客户端漏洞」、「常见的受保护资源漏洞」和「常见的授权服务器漏洞」分别讨论 OAuth 2.0 客户端、受保护资源与授权服务器中常见的漏洞,以及如何预防。
  • 「常见的 OAuth 令牌漏洞」讨论针对 OAuth 2.0 Bearer Token 与授权码的漏洞与攻击方式,以及如何防护。
  • 「OAuth 令牌」介绍 JSON Web Token(JWT)以及用于其编码的 JOSE 机制,并讲解 token 自省(introspection)与吊销(revocation),以补全 token 的生命周期。
  • 「动态客户端注册」介绍动态客户端注册(dynamic client registration),以及它如何影响 OAuth 2.0 生态系统的特性。
  • 「使用 OAuth 2.0 进行用户认证」说明 OAuth 2.0 并不是一个认证(authentication)协议,并进一步展示如何在其之上使用 OpenID Connect 构建认证协议。
  • 「基于 OAuth 2.0 的协议与配置文件」介绍构建于 OAuth 2.0 之上的 UMA(User Managed Access)协议,它支持用户对用户的资源共享;同时介绍 OAuth 2.0 与 OpenID Connect 的 HEART 与 iGov Profile,以及这些协议在特定行业垂直领域中的应用方式。
  • 「bearer 令牌以外的选择」跳出 OAuth 2.0 核心规范中常见的 Bearer Token,讲解持有证明(Proof of Possession, PoP)token 与 TLS token 绑定如何与 OAuth 2.0 协同工作。
  • 「总结与结语」对全书进行总结,并引导读者在未来如何应用这些知识,包括对相关库与更广泛 OAuth 2.0 社区的讨论。

我们不要求你按顺序阅读本书——当然你也完全可以这么做,我们也尽量按可顺读的方式组织内容。我们建议你把前两章连着读完,因为它们会提供对 OAuth 2.0 非常全面的概览,并深入剖析关键概念与组件。不过坦白说,你很可能是在寻找某些特定信息:你可能会先读客户端开发与客户端漏洞相关章节,然后跳到用户认证或 token 管理章节,再去看看授权服务器的内部机制。基于此,我们也尽力让每一章都能自成体系;同时在全书中加入了指向其他内容的引用,方便你按主题快速定位与串联阅读。

关于代码

本书所有代码均以 Apache 2.0 许可证开源。我们认为,鼓励读者使用、改编并贡献这些代码非常重要,即便它们只是练习与示例。OAuth 这类开放标准与开源软件相辅相成,我们也希望为此生态尽一份力。源码托管于 GitHub:https://github.com/oauthinaction/oauth-in-action-code/ 。我们鼓励你 fork、clone、创建分支,甚至通过 Pull Request 一起把它完善得更好。「构建一个简单的OAuth客户端」至「bearer 令牌以外的选择」配有代码练习;附录 A 提供框架概览,附录 B 收录部分代码清单。你也可以在出版社网站下载代码:www.manning.com/books/oauth-2-in-action

本书所有代码使用 Node.js 的 JavaScript 编写。作为主要示例的 Web 应用使用 Express.js 以及多种其他库来实现功能。由于本书目标并非让你掌握某一特定语言或平台,我们尽可能帮读者避开 JavaScript 的一些“怪癖”。如果你使用过任何 Web 框架(例如 Java Spring 或 Ruby on Rails),你会对大部分概念与结构感到熟悉。此外,我们还尽量提供带文档的工具函数,用于处理 OAuth 协议之外的一些辅助细节,例如构建包含查询参数且格式/编码正确的 URL,或生成 HTTP Basic 认证字符串。关于本书所用代码环境的更多信息(包括一个用于演示如何启动运行的简单练习),请参见附录 A。

部分精选练习也可在 Katacoda(www.katacoda.com)在线获取。Katacoda 是一个交互式、自助式教程网站。这些练习使用与书中完全相同的代码,但在可通过 Web 访问的容器化运行环境中呈现。

代码约定

本书包含大量源代码示例,既有带编号的代码清单,也有穿插在正文中的代码。在两种情况下,源代码都会使用等宽字体排版,以与普通文本区分。有时为强调相较于本章前一步骤发生变化的代码(例如新增功能对既有代码行的补充),相关代码还会以加粗显示。

在许多情况下,原始源码做过重新排版:我们增加了换行、调整了缩进,以适配书中的版面空间。极少数情况下,即便如此仍不够,代码清单中会包含续行标记()。此外,当正文已对代码进行说明时,清单中常会移除源码注释。许多代码清单还配有注解,用于强调重要概念。

作者在线(Author Online)

购买《OAuth 2 in Action》可免费访问 Manning Publications 运营的私有论坛,你可以在其中对本书发表评论、提出技术问题,并获得作者及其他读者的帮助。要访问并订阅该论坛,请在浏览器中打开:www.manning.com/books/oauth-2-in-action 。该页面会说明注册后如何进入论坛、可获得哪些帮助,以及论坛的行为规范。

Manning 对读者的承诺,是提供一个平台,让读者之间、以及读者与作者之间能够进行有意义的交流。这并不意味着作者必须投入任何特定数量的时间参与论坛讨论;作者的参与始终是自愿的(且无酬)。我们建议你不妨抛出一些有挑战性的问题,以免作者的兴趣跑偏!

只要本书仍在印行,出版社网站将持续提供 Author Online 论坛及以往讨论存档的访问入口。