JWT原理
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
JWT(JSON Web Token)原理详解
1. 核心结构
JWT由三部分组成,通过.
连接:
-
头部(Header)
包含元数据,通常为:{ "alg": "HS256", // 签名算法(如HMAC SHA256) "typ": "JWT" // 令牌类型 }
经Base64Url编码后形成第一部分。
-
载荷(Payload)
存储实际数据(称为"声明"),例如:{ "sub": "123456", // 主题(用户ID) "name": "Alice", "iat": 1516239022 // 签发时间戳 }
经Base64Url编码后形成第二部分。
-
签名(Signature)
对前两部分组合的加密签名:HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret_key )
用于验证数据完整性。
完整JWT格式:Header.Payload.Signature
示例:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTYiLCJuYW1lIjoiQWxpY2UiLCJpYXQiOjE1MTYyMzkwMjJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
2. 工作流程
graph LR
A[客户端登录] --> B[服务器验证身份]
B --> C[生成JWT]
C --> D[返回JWT给客户端]
D --> E[客户端存储JWT<br>(如LocalStorage)]
E --> F[后续请求携带JWT]
F --> G[服务器验证签名<br>并读取Payload]
G --> H[授权访问资源]
3. 签名验证原理
服务器通过以下步骤验证:
- 用相同算法(如HS256)和密钥重新计算签名
- 对比客户端提交的签名与计算值
- 若匹配,则证明:
- 数据未被篡改( 签名 新 ≡ 签名 原 \text{签名}_\text{新} \equiv \text{签名}_\text{原} 签名新≡签名原)
- 载荷信息可信
4. 关键特性
- 无状态性:服务器无需存储会话信息
- 自包含性:所有必要数据都在令牌中
- 跨域支持:适用于API和微服务架构
- 安全性依赖:签名密钥的保密性(若泄露则令牌可伪造)
5. 代码示例(生成JWT)
import jwt
from datetime import datetime, timedelta
secret_key = "your_secret_key" # 必须严格保密
# 构建Payload
payload = {
"user_id": "123",
"exp": datetime.utcnow() + timedelta(hours=1) # 1小时后过期
}
# 生成JWT
token = jwt.encode(payload, secret_key, algorithm="HS256")
print("JWT:", token)
注意:实际应用中需:
- 使用强密码学算法(如RS256)
- 设置合理过期时间(
exp
声明)- 通过HTTPS传输防止截获
- 敏感数据避免存入Payload(因Base64可解码)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、pandas是什么?
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、使用步骤
1.引入库
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
更多推荐
所有评论(0)