豌豆Ai站群搜索引擎系统 V.25.10.25 网址:www.wd.chat

🗣 Wd提问: JWT源码开发

🤖 Ai回答:
JSON Web Token (JWT) 是一种轻量级的开放标准(RFC 7519),用于在网络应用环境中安全地传输信息。JWT 的核心是通过加密算法生成一个紧凑且自包含的字符串,可以安全地在客户端和服务器之间传递。下面将从 原理、编码流程、源码实现 逐步讲解 JWT 的开发过程,并提供一个简单的代码示例。

一、JWT 的基本结构
JWT 由三部分组成,用 `.` 分隔:
1、Header(头部):声明加密算法(如 `HS256` 或 `RS256`)和 Token 类型(通常为 `JWT`)。
2、Payload(负载):包含声明(claims),分为:
注册声明(Registered Claims):如 `iss`(签发者)、`exp`(过期时间)、`sub`(主题)等。
公共声明(Public Claims):可公开的自定义声明。
私有声明(Private Claims):双方约定的私有声明。
3、Signature(签名):通过 `Header + Payload` 和密钥生成的签名,用于验证数据完整性和身份。

二、JWT 的编码流程
1、编码步骤
1、生成 Header:
json
{
alg: HS256, // 加密算法(如 HMAC-SHA256)
typ: JWT // 类型声明
}

2、生成 Payload:
json
{
sub: 1234567890,
name: John Doe,
iat: 1516239022, // 签发时间(Unix 时间戳)
exp: 1516242622 // 过期时间(iat + 有效期)
}

3、Base64Url 编码:
将 Header 和 Payload 转为 JSON 字符串,再进行 Base64Url 编码。
4、生成 Signature:
plaintext
HMACSHA256(
base64UrlEncode(header) + '.' + base64UrlEncode(payload),
secret_key
)

5、拼接三部分:
plaintext
<base64UrlHeader.<base64UrlPayload.<signature


2、解码与验证
1、拆分三部分:用 `.` 分割 Token。
2、验证签名:
用相同的算法和密钥重新计算签名,对比是否与原签名一致。
3、验证声明:
检查 `exp`(是否过期)、`nbf`(生效时间)、`iat`(签发时间)等。

三、JWT 源码实现(以 Python 为例)
以下是一个简单的 JWT 编码和验证实现,使用 `HS256` 算法和 `base64` 库:

python
import base64
import hashlib
import hmac
import json
from time import time

def base64url_encode(data: bytes) str:
return base64.urlsafe_b64encode(data).rstrip(b'=').decode('utf-8')

def base64url_decode(data: str) bytes:
padding = len(data) % 4
if padding:
data += '=' * (4 padding)
return base64.urlsafe_b64decode(data)

def generate_jwt(header: dict, payload: dict, secret: str) str:
Step 1: Encode Header and Payload
header_json = json.dumps(header).encode('utf-8')
payload_json = json.dumps(payload).encode('utf-8')

encoded_header = base64url_encode(header_json)
encoded_payload = base64url_encode(payload_json)

Step 2: Generate Signature
signing_input = f{encoded_header}.{encoded_payload}.encode('utf-8')
signature = hmac.new(
secret.encode('utf-8'),
signing_input,
hashlib.sha256
).digest()
encoded_signature = base64url_encode(signature)

Step 3: Combine
return f{encoded_header}.{encoded_payload}.{encoded_signature}

def verify_jwt(token: str, secret: str) dict | None:
parts = token.split('.')
if len(parts) != 3:
return None

encoded_header, encoded_payload, encoded_signature = parts

Rebuild signing input
signing_input = f{encoded_header}.{encoded_payload}.encode('utf-8')

Recompute signature
expected_signature = hmac.new(
secret.encode('utf-8'),
signing_input,
hashlib.sha256
).digest()
expected_sig_str = base64url_encode(expected_signature)

Compare signatures (constant-time comparison to prevent timing attacks)
if hmac.compare_digest(expected_sig_str, encoded_signature):
Decode payload and validate claims
try:
payload = json.loads(base64url_decode(encoded_payload))
if 'exp' in payload:
current_time = time()
if payload['exp'] < current_time:
return None Expired
return payload
except:
return None
return None

示例用法
if __name__ == __main__:
header = {alg: HS256, typ: JWT}
payload = {
sub: 1234567890,
name: John Doe,
iat: int(time()),
exp: int(time()) + 3600 有效期 1 小时
}
secret = your-256-bit-secret

token = generate_jwt(header, payload, secret)
print(Generated Token:, token)

验证 Token
verified_payload = verify_jwt(token, secret)
if verified_payload:
print(Payload:, verified_payload)
else:
print(Invalid Token)

四、关键注意事项
1、安全性:
密钥(`secret`)必须保密,避免硬编码。
使用强加密算法(如 `RS256` 需要 RSA 密钥对)。
禁止在 JWT 中存储敏感信息(如密码)。
2、声明管理:
`exp` 必须严格验证,防止过期 Token 被重用。
可以添加 `nbf`(生效时间)、`aud`(接收方)等声明。
3、编码细节:
Base64Url 编码需要去除结尾的 `=` 并替换字符(如 `+` → `-`, `/` → `_`)。
签名比较应使用 `hmac.compare_digest` 防止时序攻击。

五、扩展与优化
1、支持多种算法:实现 `RS256` 需要 RSA 密钥对生成和签名。
2、声明校验增强:添加 `aud`(接收方)、`jti`(JWT ID 防重放)等验证。
3、库的使用:实际项目中建议使用成熟的库(如 Python 的 `PyJWT`),但理解底层原理有助于排查问题。

通过以上步骤,你可以实现一个基础的 JWT 库。实际开发中,建议结合现有库并遵循最佳实践以确保安全性。

Ai作答

📣 商家广告


月饼

广告招商

贵阳用友软件

豌豆Ai站群搜索引擎系统

广告招商


0

IP地址: 221.12.161.7

搜索次数: 0

提问时间: 2025-10-30 11:57:29

🛒 域名购买
xq.gs
qun.cx
yb.gs
xc6.net
afuncard.com
46.gold
73.gold
yk.gs
cisou.com.cn
zqll.cn

❓️ 热门提问
常见的域名注册平台有哪些
云服务器国内
域名怎样买
可以免费申请域名的网站
xampp虚拟主机
r910服务器
创梦idc
德宏网站建设公司
,美国vps
VPS服务器迁移案例
豌豆Ai站群搜索引擎系统

🌐 域名评估
rmpf.cn
qklpay.com
mmmf.com.cn
ax.cq.cn
trfi.cn
byd.hk.cn
starfair.org.cn
635.net.cn
mypettoy.com
cxw.cc

⛏ 最新挖掘
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜

🖌 热门作画

🤝 关于我们:
豌豆Ai 域名 建站 站群 留痕 推广 评估 源码
开发Ai 工具 日记 价格 加盟 广告 流量 留言 联系

🗨 加入群聊
群

🔗 友情链接
广州香港月饼厂  搜尋引擎大全  ai提问

🧰 站长工具
Ai工具  whois查询  搜索

📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。

👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。

上一篇 34279 34280 34281 下一篇