关于本书

关于本书

本书意在对OAuth 2.0以及包括OpenID Connect和JOSE/JWT在内的众多相关技术进行全面且透彻的探讨。希望读者读完本书之后,能对OAuth 2.0有深刻的理解,明白它的工作原理,还知道如何正确、安全地将其部署在并不安全的互联网上。

本书的目标读者可能使用过OAuth 2.0,或者至少听说过它,但并不明白其工作原理。读者可能曾经开发过一些OAuth 2.0组件,比如与特定API交互的客户端,但也对其他类型的客户端或者OAuth 2.0生态系统中的其他部分充满好奇。读者可能想知道:“当请求授权码时,授权服务器到底做了些什么?”或者,读者接到任务要对一个API进行保护,想确认OAuth 2.0是否能处理这个任务,如果它可以,又应如何驾驭它。也许读者的日常工作是开发客户端,但很想知道受保护的资源是如何处理发送过去的令牌的。又或者,读者正在构建一个受保护的API,但想知道正在与其打交道的授权服务器是如何正确地发放令牌的。我们希望读者了解OAuth 2.0这个工具真正好在哪里,并且能有效地运用它。

我们假设读者了解基本的HTTP工作原理,至少理解TLS加密链接的作用,若了解其原理细节就再好不过了。本书使用JavaScript,但并不讲解JavaScript的用法,我们会尽量解释代码所表达的抽象概念和功能本身,以便读者能将它应用到自己的平台和语言上。

路线图

本书分为4个部分,总共16章。第一部分由第1~2章构成,概述了OAuth 2.0协议,可以说是核心阅读材料。第二部分由第3~6章构成,展示了如何构建一个完整的OAuth 2.0生态系统。第三部分由第7~10章构成,讨论了OAuth 2.0生态系统中各个部分可能出现的漏洞,以及如何规避。最后一部分由第11~16章构成,这一部分跳出OAuth 2.0协议的核心部分,探讨更外围生态系统中的标准和规范,最后还对全书进行了总结。

  • 第1章概述了OAuth 2.0,讲述了开发它的动机,还介绍了OAuth出现之前与API安全相关的方法。
  • 第2章深入讲解授权码许可类型,这是OAuth 2.0核心中最常用、最典型的一种许可类型。
  • 第3~5章分别展示如何构建简易但功能完整的OAuth 2.0客户端、受保护的资源服务器,以及授权服务器。
  • 第6章讨论OAuth 2.0协议内部的多样性,介绍了授权码之外的其他许可类型,还讨论了原生应用中的许可类型。
  • 第7~9章分别讨论OAuth 2.0客户端、受保护资源及授权服务器中常见的漏洞,以及如何避免这些漏洞。
  • 第10章讨论OAuth 2.0中bearer令牌和授权码的弱点,针对它们的攻击,以及如何规避。
  • 第11章介绍JSON Web Token(JWT)及其所用的编码机制JOSE,还包括令牌内省和撤回,这些主题完整覆盖了令牌的生命周期。
  • 第12章介绍动态客户端注册,并讨论它对OAuth 2.0生态系统的影响。
  • 第13章先解释为什么OAuth 2.0不是身份认证协议,继而介绍如何基于它使用OpenID Connect构建一个身份认证协议。
  • 第14章介绍构建于OAuth 2.0之上的User Managed Access(UMA)协议,该协议允许用户对用户(user-to-user)的分享。这一章还介绍了HEART和iGov这两个OAuth 2.0配置规范以及OpenID Connect,以及这些协议在特定行业领域中是如何应用的。
  • 第15章指出OAuth 2.0核心规范中的常规bearer令牌并不能满足所有需求,并描述了Proof of Possession(PoP)令牌及TLS令牌绑定如何与OAuth 2.0协同工作。
  • 第16章对全书进行总结,并指导读者如何进一步应用这些知识,还介绍了相关代码库以及范围更广的社区。

虽然我们按这样的次序组织编排了本书内容,但读者并非一定要按这样的顺序阅读。我们建议读者先阅读前两章,因为前两章对OAuth 2.0进行了全面概述,并深入介绍了关键概念和组件。不过说实话,读者可能在寻找某些特定的信息,所以可能会去阅读客户端开发和客户端弱点的相关章节,然后跳到用户身份认证或者令牌管理的章节,之后又去看与授权服务器相关的内容。因此,我们也试着确保让每一章相互独立,而且还对相关内容的引用提供了标注,以便读者查找。

代码

本书的代码采用Apache 2.0许可协议开源。虽然它们只是练习和示例,但我们也鼓励人们使用、重新组织以及贡献代码。像OAuth这样的开放标准与开源界是息息相关的,大家的贡献对它们来说非常重要。代码可以从GitHub(https://github.com/oauthinaction/oauth-in-action-code/)获取,我们鼓励读者对其分叉、克隆、创建分支,甚至可以创建拉取请求来改进代码。第3~13章和第15章提供了实战代码,附录A对书中使用的框架进行了介绍,附录B列出了整理之后的代码清单。也可以从英文版出版社网站(https://www.manning.com/books/oauth-2-in-action)下载本书代码。

本书中的所有代码都使用运行于Node.js平台的JavaScript语言编写。书中大部分示例都是Web应用,使用了Express.js框架以及其他的库。我们已经尽最大努力让读者免受JavaScript特异性的困扰,因为本书的目标并不是仅让读者精通某一语言或平台。如果读者曾经使用过诸如Java Spring或者Ruby on Rails这样的Web框架,那一定对大部分概念和思想很熟悉。此外,本书还提供了实用函数,并附有文档说明,用于执行OAuth协议中的琐碎功能,比如构造包含查询参数的URL,或者生成HTTP基本认证字符串。关于本书所使用的代码环境的更多细节,请参阅附录A,其中包含一个简单的练习,向读者展示了如何启动和运行代码。

还可以通过Katacoda在线运行本书的练习,Katacoda是一个交互式的自学网站。这些练习使用的代码和本书中使用的完全相同,只是通过Web提供了一个容器化的运行环境。

代码约定

本书包含了大量示例源代码,它们要么被列在代码清单中,要么穿插在正文文本中。无论哪种情况,源代码都以fixed-width font like this这样的格式呈现,以区别于普通文本。有时候会以粗体来强调代码中相对于前一步骤的变化,比如向当前代码添加了新的功能。

在多数情况下,原始的源代码都经过了重新格式化;增添了换行符并调整了缩进,以适应图书页面上有限的空间。在极少数情况下,即使这样也还不够,还需要在代码清单中使用续行符号(➥)。另外,如果正文已对代码进行描述,源代码中的注释一般会被移除。很多代码清单中附有注解,以突出重要概念。

作者在线

购买了本书英文版就可以免费访问由Manning出版社运营的私密Web论坛,在这里读者可以发表对本书的评论,可以提出技术问题,并有可能得到作者或者其他用户的帮助。要访问和订阅论坛,可以使用浏览器打开https://www.manning.com/books/oauth-2-in-action。该网页上说明了如何注册并进入论坛、可以获取哪些帮助以及论坛行为准则等。

Manning出版社为读者和作者提供一个空间,让他们能够进行有意义的交流,但并不保证作者的参与程度,作者在论坛中的贡献都是自愿的(也是无偿的)。建议读者向作者多提一些具有挑战性的问题,这样会更引起他们的兴趣。

只要本书英文版处于销售状态,作者在线论坛以及上面的讨论就会一直可访问。

电子书

扫描如下二维码,即可购买本书电子版。

{%}

目录