Flask JWT 教程:Jwt 字符串组合
以下是 JWT 的一些使用场景:
1。授权:这是JWT最常见的使用场景。用户一旦登录,后续的所有请求都必须携带JWT,这样用户就可以携带令牌访问所有的路由、服务器和资源。单点登录是目前最常见的场景,因为它开销较低,并且可以轻松实现跨域访问。
2。信息交换:JWT令牌是实现不同客户端上安全数据交互的一个很好的方式。由于 JWT 可以进行签名(即使用公钥/私钥对加密),因此您可以确定发送消息的人就是我们期望的人。此外,由于签名是根据有效负载中的标头计算的,因此还可以验证内容是否已被更改。
JWT 组成
JWT 是由三条信息组成的字符串。这三条信息用.
连接起来形成一个Jwt字符串。它们是
- Header
- Payload
- Signature
就像这样:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiXHU2YjYzXHU1ZmMzXHU1MTY4XHU2ODA4XHU3ZjE2XHU3YTBiIiwiYWRtaW4iOnRydWV9.Y1H8vDimuq_FHZ7UDOLozAJNLoPTack-ubsxCEDDgBc
第一部分是 header:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
第二部分是 Payload: :
Y1H8vDimuq_FHZ7UDOLozAJNLoPTack-ubsxCEDDgBc
Header
标头通常由两部分组成:令牌的类型(即 JWT)和使用的签名算法(例如 HMAC、SHA256 或 RSA)。
例如:
{
"alg": "HS256",
"typ": "JWT"
}
jwt的头部携带两条信息:
- type字段是声明的类型,这里jwt
- alg字段是加密算法,通常使用HM25ACBase64编码的作用是第一部分来自
有效负载
有效负载是存储有效信息的地方。该有效信息包含三部分:注册声明(Registered Claims)、公开声明(Public Claims)和私人声明(Private Claims)
1。注册声明:这是一组非强制但推荐的预定义声明。他们提供各种易于使用和共享的语句。其中有iss(发行人发行人)、exp(有效期)、sub(主题)、audi(audience受众)等。
2。公共声明:使用 JWT 的人可以随意定义这些声明。但为了避免冲突,它们应该在 Internet JWT 注册表中定义,或者可以定义为包含防冲突名称的 URI。
3。私人声明:这些声明的目的是在同意使用这些声明的各方之间共享信息,既不是注册声明,也不是公开声明。
定义有效负载:
payload = {
"name": "正心全栈编程",
"admin": True
}
以 Base64 对其进行编码以获取 JWT 的第二部分。
签名
要创建签名部分,必须首先获取标头中指定的 header、payload、secret(秘密密钥)、算法(alh),然后进行签名。
例如,如果要使用HMAC SHA256算法创建签名如下:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
JWT的第三部分是签证信息。该签证信息由三部分组成:
- Header(无base64)
- payload(无base64)
- secret
这部分需要base64加密的header和base64加密的payload。使用
.
中的字符串进行连接,然后使用标头中声明的加密方法。进行saltsecret
组合加密,然后形成jwt的第三部分。将这三个部分用
.
连接起来形成一个完整的字符串,从而形成最终的jwt。注:生成的JWT token可以验证https://jwt.io/#debugger-io
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。