- 什么是JWT
Json Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以JSON对象的形式安全地传输信息。此信息可以验证和信任,因为它是数字签名的。jwt可以使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。
尽管jwt可以被加密以提供双方之间的保密性,但我们将重点关注签名令牌。签名令牌可以验证其中包含的声明的完整性,而加密令牌则向其他方隐藏这些声明。当使用公钥/私钥对对令牌进行签名时,签名还证明只有持有私钥的一方才是签名方。
- 什么时候使用JWT
以下是JSON Web Tokens使用的一些场景:
授权:这是使用JWT最常见的场景。一旦用户登录,每个后续请求将包括JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录(Single-Sign-On)是目前广泛使用JWT的一个特性,因为它的开销很小,而且能够轻松地跨不同的域使用。
信息交换:JSON Web Tokens 是一种在各方之间安全传输信息的好方法。因为jwt可以使用公钥/私钥对进行签名,因此可以确保发送者是他们所说的人。另外,由于签名是使用报头和有效负载计算的,所以您还可以验证内容没有被篡改。
- JWT结构
JSON Web Tokens 由三个部分组成,用点(.)隔开,分别是:
1、Header
2、Payload
3、Signature
如下形式:
xxxx.yyyy.zzzz
Header(头)
头通常由两部分组成:Token的类型(JWT)和 签名算法,如HMAC、SHA256或RSA。
示例:
{ "alg": "HS256", "typ": "JWT"}
这个JSON会被Base64Url编码,形成JWT的第一部分。
Payload(负载)
Token的第二部分是有效负载,它包含声明。声明是关于实体(通常是用户)和附加数据。有三种类型的声明:注册声明、公共声明和私有声