jsonwebtoken设置token
时间: 2025-01-02 13:25:42 浏览: 8
### 设置 JSON Web Token (JWT)
在创建和设置 JWT 时,主要涉及三个组成部分:头信息(header)、消息体(payload)以及签名(signature)[^1]。
#### 创建 Header
Header 部分通常包含了两部分内容:令牌类型(通常是 `JWT`)和所使用的哈希算法(如 HMAC SHA256 或 RSA)。这部分会被编码成 Base64Url 编码后的字符串:
```json
{
"alg": "HS256",
"typ": "JWT"
}
```
转换为Base64Url之后可能是这样的:
```plaintext
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
```
#### 构建 Payload
Payload 包含了实际的数据,这些数据被称为声明(claims)。声明分为三种类型:注册声明(reserved claims),公共声明(public claims),私有声明(private claims)。以下是 payload 的例子:
```json
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1516239022
}
```
经过Base64Url编码后可能如下所示:
```plaintext
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0=
```
#### 生成 Signature
为了创建签名部分,需要采用编码过的 header 和 payload,并利用指定的密钥与算法进行加密处理。例如使用HMAC SHA256算法,则会按照下面方式计算:
```python
import hmac
import hashlib
import base64
def create_signature(secret_key, message):
signature = hmac.new(
secret_key.encode('utf-8'),
msg=message.encode('utf-8'),
digestmod=hashlib.sha256
).digest()
return base64.urlsafe_b64encode(signature).decode('utf-8').rstrip('=')
```
最终得到完整的 JWT 将是由上述三者通过`.`连接而成的一串字符,形如:
```plaintext
<base64url-encoded-header>.<base64url-encoded-payload>.<signature>
```
这便是如何在一个应用程序中配置并生成 JWT token 的基本过程[^4]。
阅读全文