关于本书
本书的读者对象
本书首先介绍基本的安全编码技术,之后深入研究身份认证和授权技术,旨在引导读者掌握在不同环境下确保API安全所需的技术。在此过程中,你将会看到如何使用诸如速率限制(rate-limiting)和加密之类的技术来增强API的抗攻击能力。
本书适合没有安全编码或安全加密经验的读者。对于有一定构建Web程序经验的开发人员来讲,本书可以提高他们对API安全技术和最佳实践的了解。这类读者应该已经很了解如何构建RESTful或其他远程API,并对编程和开发工具(编辑器或IDE)的使用了然于胸。本书还可以帮助技术架构师紧跟最新API安全方法技术更新的步伐。
本书的结构
本书分为5部分,共13章。
第一部分介绍了API安全的基本原理,是本书其余内容的基础。
- 第1章介绍了API安全的主题以及如何定义API安全性。通过阅读本章,你将学习API安全的基本机制以及如何看待威胁和漏洞。
- 第2章描述了安全开发所涉及的基本原则以及如何应用于API安全。在本章你将会学到如何使用标准编码实践来避免许多常见的软件安全缺陷。本章还介绍了一个名为Natter的应用实例程序,该程序中的API构成了本书代码示例的基础。
- 第3章简单介绍了本书其余章节涉及的基本安全机制。在本章你将会看到如何向Natter API中添加基本的身份验证、速率限制、审计日志记录以及访问控制机制。
第二部分将更详细地介绍RESTful API的身份验证机制。认证是所有其他安全控制的基石,所以我们需要多花一些时间在这部分,确保基础牢靠。
- 第4章介绍了传统的会话Cookie身份验证以及通过展示如何从传统Web应用程序中进行技术调整,阐述Cookie身份验证如何升级到现代Web API的应用场景中。本章还会介绍一些有关会话Cookie的新进展,比如SameSite Cookie。
- 第5章介绍了基于令牌的身份验证的替代方法,包括Bearer token以及标准的身份验证头。本章还介绍了如何使用本地存储来保存前端Web浏览器中的令牌,以及如何加固后端数据库令牌存储。
- 第6章讨论了自包含令牌的格式,如JSON Web 令牌及其替代方案。
- 第三部分介绍了授权相关的内容。
- 第7章介绍了OAuth2,它既是基于令牌的身份验证的标准方法,也是委托授权的方法。
- 第8章深入研究了基于身份的访问控制技术,也就是基于用户的身份来决定用户的行为。本章内容包括访问控制列表(access control list)、基于角色的访问控制(role-based access control)以及基于属性的访问控制(attribute-based access control)。
- 第9章介绍了基于能力的访问控制(capability-based access control),它是基于细粒度密钥的访问控制方法,用于替代基于身份的访问控制技术;还介绍了Macaroon,这是一种有趣的新令牌格式,也是一种令人兴奋的新的访问控制方法。
第四部分深入探讨了如何确保运行在Kubernetes环境下的微服务API的安全性。
- 第10章从开发人员的角度详细介绍了在Kubernetes中部署API以及确保其安全的最佳实践。
- 第11章讨论了服务到服务(service-to-service)API的身份验证方法,以及如何安全地存储服务账户凭证和其他机密数据。
第五部分介绍物联网(IoT)中的API。确保这类API的安全尤其有挑战性,因为物联网设备的能力往往很有限,并且会遭遇各种各样的威胁。
- 第12章描述了如何在物联网环境中确保客户端与服务器之间的通信安全。本章将阐述在API应用于多个传输层协议的情况下,如何保证端到端(end-to-end)的安全性。
- 第13章详细介绍了在物联网环境中为API请求授权的方法,还讨论了当设备与在线服务断开时的脱机身份验证和访问控制。
关于代码
本书有很多附有源程序的例子,并且以编号列表和普通文本两种方式提供给读者。源程序采用代码体,例如fixed-width fontlike this
,这也有助于将源程序和普通文本区别开来。有时,部分程序会被加粗标记,用于着重显示与当前章节前述内容不同的地方,比如在一行程序中添加一个新功能时。
很多最初的源程序被重新格式化,这是为了适应书的版式,添加了换行符并进行重新缩进。某些程序即使添加了换行符并重新缩进也不能适应页面布局,还有一些编号列表格式的代码中使用行延续标记(),但这两种情况极少出现。另外,文本格式的程序中的注释在编号列表格式中不会出现。许多编号列表格式的程序中有代码注解,用于解释重要的概念。
除第1章外,其余章节都提供了源程序,并可从GitHub上下载(网址为https://github.com/NeilMadden/apisecurityinaction),也可以去Manning官网下载。程序采用Java语言编写,但在编码风格和习惯用法上尽量保持中立,这些例子也应该很容易翻译成其他编程语言或框架的代码。附录A提供了配置Java所需的软件。
liveBook论坛
购买本书的读者可免费访问Manning出版社的内部Web论坛,在这里可以对本书内容发表评论,提出技术问题,并从作者和其他论坛用户那里获取帮助。论坛网址为https://livebook.manning.com/#!/book/api-security-in-action/discussion。
Manning承诺为读者和作者以及读者之间的交流提供场所。至于作者参与多少个问题的交流与解答,我们无法承诺,作者对论坛的贡献是自愿的(不收费的)。我们建议你试着询问一些有挑战性的问题,以免作者失去回答的兴趣!只要本书还在出版印刷,论坛及其历史归档均可从出版社官网访问到。
其他在线资源
需要其他帮助吗?可以参考以下内容:
- 开放式Web应用程序安全项目(OWASP)为构建安全的Web应用程序和API提供了大量的资源。其中有关安全问题的速查表是我最喜欢的,其网址是https://cheatsheetseries.owasp.org。
- https://oauth.net提供了OAuth2协议所有内容的总目录,也是一个了解该协议最新进展的好去处。