JWT 令牌
时间: 2025-05-10 16:35:22 浏览: 32
### JSON Web Token (JWT) 的概念
JSON Web Token(JWT)是一种开放标准(RFC 7519),设计用于在网络应用环境下的安全信息传输[^2]。其核心功能是以一种紧凑和自包含的方式,在客户端与服务器之间传递声明信息。这种声明信息可以包括用户的身份验证数据或其他元数据。
JWT的主要优点在于它的简洁性和可扩展性,使其非常适合于分布式系统的身份验证以及信息交换场景。通过签名机制,JWT能够确保消息的真实性和完整性,防止篡改行为的发生[^3]。
---
### JWT 的结构组成
JWT由三个部分构成,分别是头信息(Header)、消息体(Payload)和签名(Signature)。这三个部分通过点号`.`连接在一起形成最终的Token字符串:
#### 1. **Head Information**
头部通常采用JSON格式编码,并经过Base64Url处理后成为第一部分。它包含了令牌所使用的加密算法类型以及其他元数据。例如:
```json
{
"alg": "HS256",
"typ": "JWT"
}
```
#### 2. **Message Body (Payload)**
负载部分也是以JSON形式存在并转换成Base64Url表示法作为第二段内容。这部分承载着实际要发送的数据或者说是“声明”。这些声明分为注册声明、公共声明和私有声明三种类别。
- 注册声明是由IETF RFC文档定义好的字段;
- 公共声明则可供开发者自由定制但需避免冲突;
- 私有声明则是特定应用程序内部约定的内容。
#### 3. **Digital Signature / Message Authentication Code**
最后的部分是对前面两部分内容按照指定哈希函数计算得出的结果再做一次Base64Url编码得到第三段。如果使用的是HMAC SHA系列,则会利用共享密钥完成此操作;若是RSA或ECDSA公钥体系下,则依赖对应的私钥来进行签署过程。
以下是创建一个简单JWT的例子:
```python
import base64
import hashlib
import hmac
import json
def create_jwt(header, payload, secret_key):
# Encode header and payload to Base64URL
encoded_header = base64.urlsafe_b64encode(json.dumps(header).encode()).rstrip(b'=')
encoded_payload = base64.urlsafe_b64encode(json.dumps(payload).encode()).rstrip(b'=')
# Create the signature using HMAC-SHA256 algorithm with a secret key
signing_input = f"{encoded_header.decode()}.{encoded_payload.decode()}".encode()
signature = hmac.new(secret_key.encode(), signing_input, hashlib.sha256).digest()
# Convert the signature into Base64URL format
encoded_signature = base64.urlsafe_b64encode(signature).rstrip(b'=')
return f"{encoded_header.decode()}.{encoded_payload.decode()}.{encoded_signature.decode()}"
# Example usage of creating a JWT token
header_example = {"alg": "HS256", "typ": "JWT"}
payload_example = {"sub": "1234567890", "name": "John Doe", "iat": 1516239022}
secret_key_example = 'my_secret'
jwt_token = create_jwt(header_example, payload_example, secret_key_example)
print(jwt_token)
```
上述代码展示了如何手动生成一个JWT令牌的过程,其中`create_jwt()`函数接收头部、载荷以及秘密钥匙参数来构建完整的JWT字符串。
---
### 安全注意事项
尽管JWT提供了便捷的安全特性,但在实施过程中仍需要注意潜在漏洞风险。比如当设置不当可能导致攻击者轻易修改权限级别等问题发生时就需要格外小心对待每一个细节配置项的选择与管理策略制定工作[^1]。
---
阅读全文
相关推荐



















