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签发和认证

使用步骤

  1. 安装

  2. 快速签发token->登录接口,路由配置

    使用django,user表实现快速认证

path('login/', obtain_jwt_token)
  1. 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测试就可以看到自定义的返回了

2987368-20230209221230153-862782815

jwt认证类

以后接口要登录后才能访问使用

  1. 在视图类上加一个认证类, 一个权限类class

    from rest_framework_jwt.authentication import JSONWebTokenAuthentication
    class BookViewDetail(GenericViewSet, RetrieveAPIView):
    authentication_classes = [JSONWebTokenAuthentication]
  2. postman测试

    请求体中key值叫Authorization

    请求头的value值是:jwt有效的token 中间有空格

    2987368-20230209221230152-1271997939

posted @   性格如此w  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示