最近要写一篇关于JWT的论文,所以打算先试着翻译下JWT手册。学习之余也方便自己复习。
英语水平不佳,很多地方可能拗口或是存在翻译错误。因此也只能算是一篇阅读笔记吧。各位看官路过要是能提点下就再好不过了。
----------------以下是正文-------------
介绍
JSON Web Token,简称JWT(“jot”)。这是一种用于在空间受限的环境下,安全传递声明信息的标准。它已经渗入了各种主流web框架。简单、紧凑和高可用性是其架构的主要特点。虽然有很多更为复杂的系统还在被使用着,JWT任具有广泛的应用。这本小小的手册将会覆盖JWT架构最重要的几个方面,包括它们的二进制表示、用于构成JWT的运算规则,以及它们在产业中的一般用途。
1.1 什么是JSON Web Token?
一个JSON Web Token看起来是这样的(换行仅为提升可读性):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
这看起来令人费解,但事实是,它以非常紧凑的,可打印的特点,表示了一组声明,其后的签名则用于验证其可靠性。
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
声明(claim)是的对当事人或对象的定义或断言。这些声明(及其含义)中的一部分是JWT细则所规定的。其他的则由用户来定义。JWT背后的魔力在于它标准化了一些在常规操作环境下非常有用的声明。比如,为某一用户建立身份认证就是这些常规操作之一。因此,JWT标准声明之一便是sub(subject)。在第三章,我们将会逐个仔细探究这些声明。
JWT的另一个关键方面在于它的可签署性和可加密性。签署可以使用 JSON Web Signatures (JWS,RFC 7515 ),加密可以使用 JSON Web Encryption (JWE, RFC 7516 )。与JWS和JWE结合使用,JWT可以为许多不同的问题提供安全有效的解决方案。
1.2 JWT用于解决什么问题?
仅管JWT的主要目的是在双方之间传递声明,但可以说,这其中最重要的方面是,以简单的、验证可选的、加密的容器格式,组成的标准化工作。过去,为了解决这个问题,几种特定的方案已经开始公开或非公开的运作了。用于建立(关于某些用户的)声明的旧标准也依然有效。JWT带给我们的是一个简单、有效的标准化容器格式。
尽管给出的定义有点抽象,我们不难想象JWT将如何被使用,那就是登录系统(仅管其他用途也是可能的)。我们将在第二章探究其在实践中的应用。这些应用包括:
- 认证(Authentication)
- 授权(Authorization)
- 绑定身份( Federated identity )
- 客户端会话(Client-side sessions (“stateless” sessions))
- 客户端密钥(Client-side secrets)
1.3 一点点历史
JOSE(JSON Object Signing and Encryption group)成立于2011年。这个小组的目标是:
“standardize the mechanism for integrity protection (signature and MAC) and encryption as well as the format for keys and algorithm identifiers to support interoperability of security services for protocols that use JSON”(标准化完整性保护(签名和MAC)、加密以及密钥和算法标识的格式的机制,从而支持JSON协议下安全服务之间的交互性)。
到2013年一系列草案问世了,其中包括一本使用手册,里面包括了这个小组的想法的各种使用使用范例。这些草案后来演变为了JWT, JWS, JWE, JWK 和 JWA 标准。
到了2016年,这些标准在进行质量跟踪,勘误表还没出现。现在,这个小组已经不活跃了。
这些规则的主要作者是 Mike Jones , Nat Sakimura , John Bradley 以及 Joe Hildebrand。