你知道JWT是干嘛的吗?😜
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用间传递声明式信息。它可以安全地将 用户声明、权限信息 和其他 元数据 作为 JSON对象 传输,并使用 数字签名 进行验证和信任。JWT 在现代身份验证和授权机制中得到广泛应用,特别适用于 无状态、分布式 系统的身份验证需求
接下来就来好好了解下它吧
JWT的组成
JWT由 三部分 组成,它们通过点号 .
进行分隔:
- 头部(Header):头部包含两部分信息:令牌的类型 和 所使用的 摘要算法。通常,JWT令牌的类型为 "JWT",算法可以是 HMAC 或者其他自定义算法
{
"alg": "HS256",
"typ": "JWT"
}
- 载荷(Payload):载荷是JWT的主要信息存储部分,可以包含任意数量的声明(claims)。声明是关于实体(通常是用户)和其他数据的声明性语句,有三种类型的声明:注册声明、公共声明 和 私有声明。注册声明包含一些 标准化 的字段,如发布者、过期时间等。公共声明包含自定义字段,供受信任的各方使用。私有声明是自定义的声明,用于在特定应用中定义私有的声明内容
{
"sub": "1234567890",
"name": "yy",
"admin": true
}
- 签名(Signature):签名用于验证消息的 完整性。签名由头部和载荷部分的 base64Url 编码数据,加上一个密钥,最后通过 header 里指定的摘要算法生成
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
JWT的工作流程
工作流程如下所示:
- 认证:用户在进行身份验证时,向服务器发送 用户名和密码 等凭据
- 生成JWT:服务器验证凭据后,生成一个JWT,并将 用户信息 和其他相关信息编码为JWT的载荷部分
- 返回JWT:服务器将生成的JWT发送回客户端
- 存储JWT:客户端将JWT存储在本地,通常使用浏览器的本地存储机制(如localStorage、cookie)
- 请求授权:客户端在后续的请求中,将JWT作为身份验证凭据附加到请求的头部或其他适当的位置
- 验证JWT:服务器接收到请求后,验证JWT的签名,并解码其中的信息
- 授权访问:服务器根据JWT中的信息,验证用户的身份和权限,并进行相应的授权操作
JWT 的优势
JWT在身份验证和授权机制中具有以下优势:
- 无状态:JWT是无状态的,服务端不需要保存用户的 会话信息,提高了系统的可扩展性和性能
- 跨域支持:JWT可以在不同的域和服务之间安全地传输,并且可以用于跨域认证
- 自包含性:JWT载荷部分可以包含用户声明、权限信息和其他元数据,减少了对数据库的频繁查询
- 可靠性和安全性:JWT使用 数字签名 进行验证和信任,防止数据篡改和伪造
- 灵活性:JWT可以根据需求定制不同的声明和算法,适用于多种场景和应用需求
结语
JWT是一种强大的身份验证和授权机制,通过将用户声明和权限信息封装在JSON对象中,实现了无状态、可扩展和安全的身份验证。它在现代的网络应用中得到广泛应用,并提供了简单、灵活且可靠的解决方案,通过理解和应用JWT,我们可以构建更安全、高效的系统,并提供更优质的用户体验
都看到这里啦,如果本篇文章对你有帮助,希望能 点个赞👍 支持下啦,你们的支持才是我最大的动力!😘
转载自:https://juejin.cn/post/7247050634191716410