jwt基础(01)
jwt基础
目录
1 jwt介绍和原理
cook session token 发展史
JWT全称: json web token(JWT) 就是web方向token的使用
JWT的构成三部分 每部分用 . 分隔
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
第一部分: header 头
声明类型,这里是JWT
声明加密的算法 通常直接使用HMAC SHA256
公司信息....
第二部分: payload 荷载
存放有效信息的地方
过期时间
签发时间
用户id
用户名字
第三部分: signature, 签名
第一部分和第二部分通过密钥+加密方式(HAMC SHA256)得到
jwt开发重点
登录接口---> 签发token
认证类-->jwt认证
base64编码和解码
import base64 import json dic = {'user_id':1 ,'username':'wei'} dic_str = json.dumps(dic) # 把这个字符串使用base64编码 res = base64.64encode(dic_str.encode('utf-8')) print res # 注意 :base64编码后, 字符长度一定是4的倍数,如果不是,使用 = 补齐 = 不表示数据 # 解码 res = base64.b64decode('TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ=') print(res)
bas464应用场景
- jwt 使用了base64
- 网络中传输数据,也会经常使用 base64编码
- 网络传输中有的图片 使用base64编码
drf-jwt快速使用
django+drf平台开发jwt这套东西,有两个模块
djangorestframework-jwt–>虽然年久失修,官网不支持django4.x了但是其中底层实现原理都是一样的
djangorestframework-simplejwt---》公司用的多
自己封装jwt签发和认证
使用步骤
-
安装
-
快速签发token->登录接口,路由配置
使用django,user表实现快速认证
path('login/', obtain_jwt_token)
-
postman测试
向http://127.0.0.1:8000/login/发送post请求,携带username和password
定制返回格式
以后如果基于auth的User标签token,就可以自己不写,但是登录接口返回格式,只有token,不符合公司规范
使用步骤
1.写个函数jwt_response_payload_handler
def jwt_response_payload_handler(token, user=None, request=None): return { 'code': 100, 'msg': '登录成功', 'username': user.username, 'token':token }
2.配置项目配置 新建utils.py
JWT_AUTH = { 'JWT_RESPONSE_PAYLOAD_HANDLER':'app01.utils.jwt_response_payload_handle' }
3.使用postman测试就可以看到自定义的返回了
jwt认证类
以后接口要登录后才能访问使用
-
在视图类上加一个认证类, 一个权限类class
from rest_framework_jwt.authentication import JSONWebTokenAuthentication class BookViewDetail(GenericViewSet, RetrieveAPIView): authentication_classes = [JSONWebTokenAuthentication] -
postman测试
请求体中key值叫Authorization
请求头的value值是:jwt有效的token 中间有空格
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构