原文地址:https://www.jeremyjone.com/793/,转载请注明。
写在之前
更多学习内容,可以看我的 .NET 学习之路系列-Jwt。
什么是 JWT
Jwt,Json Web Token 是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方法,用于在各方之间安全地将信息作为 JSON 对象传输。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用密码(使用 HMAC 算法)或使用 RSA 或 ECDSA 的公钥/私钥对对 JWT 进行签名。
基于 Token 的鉴权机制类似于 http 协议,也是无状态的,它不需要在服务端保留用户的认证信息,这也就意味着基于 Token 认证机制的应用不需要去考虑用户在哪一台设备登录,这为应用扩展提供了便利。
什么时候使用 JWT
以下是 JWT 有用的一些情况:
-
授权:这是使用 JWT 最常见的方案。用户登录后,每个后续请求都将包含 JWT,从而允许用户访问该令牌锁允许的路由、服务和资源。单一登录是当今广泛使用 JWT 的一项功能,因为它的开销很小并且可以在不同的域中轻松使用。
-
信息交换:JWT 是在各方之间安全地传输信息的一种好方法。因为可以对 JWT 进行签名,所以您可以确定发件人是他们所说的人。此外,由于签名是使用标头和有效负载计算的,因此还可以验证内容是否被篡改。
JWT 的结构
JWT 以紧凑的形式将三部分内容由点(.)分隔,其三部分内容分别是:
- 标头
- 有效载荷
- 签名
因此,JWT 通常如下所示:
xxxxx.yyyyy.zzzzz
标头 Header
标头通常由两部分组成:令牌类型(即 JWT)和所使用的签名算法。
算法通常为:
- HMAC
- SHA256
- RSA
例如:
{
"alg": "HS256",
"typ": "JWT"
}
然后,此 JSON 以 Base64Url 编码格式形成 JWT 的第一部分。
有效载荷 Payload
JWT 的第二部分是有效载荷,其中包含声明。声明有关实体和其他数据声明。声明有三种类型:注册声明、公共声明以及私有声明。