首页 > 编程语言 >接口文档,jwt介绍和构成,jwt签发与认证,base64编码,drf-jwt使用,django-rest-framework-jwt快速使用,定制签发返回格式,源码分析

接口文档,jwt介绍和构成,jwt签发与认证,base64编码,drf-jwt使用,django-rest-framework-jwt快速使用,定制签发返回格式,源码分析

时间:2023-09-08 19:13:04浏览次数:31  
标签:编码 签发 base64 jwt 接口 认证 token 源码

1 接口文档

# 作为后端,接口写好了
# 作为前端,需要使用我们写的接口(移动端,web,桌面端)

# 后端需要写接口文档


# 接口文档的展现形式:
	1 word ,md ,写好传到公司的某个平台---》前端可以下载
    2 自动生成接口文档---》后端通过配置--》把所写的接口都自动生成---》地址--》访问这个地址就能看到所有接口文档
    
    3 公司内部搭建接口文档平台
    	- 开源:Yapi--->同学搭建一个,给搭建用
            -https://zhuanlan.zhihu.com/p/366025001
        - 自己开发(自研)
        
    4 使用第三方平台(花钱)-->showdoc ....

# 接口文档如何写?需要有哪些东西?
	-以用户注册接口为例:
    	1 接口描述
        2 请求地址
        3 请求方式
        4 编码格式:json,urlencoded,form-data
        5 请求参数:参数详解
        	-请求地址参数
            -请求体参数
		6 返回格式示例--》返回参数说明
        7 备注(可有可无)--》错误码
        
        
        
        
# 自动生成接口文档
	-coreapi,swagger:drf-yasg
    
    
    
# coreapi自动生成
第一步:pip install coreapi
第二步:设置接口文档访问路径
from rest_framework.documentation import include_docs_urls
urlpatterns = [
    ...
    path('docs/', include_docs_urls(title='站点页面标题'))
]

第三步:在视图中,加注释

第四步:配置文件配置
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',

2 jwt介绍和构成

# 做会话保持的发展历史
	-https://www.cnblogs.com/liuqingzheng/p/8990027.html

# jwt:Json Web Token:web方向的token认证方案
# 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证(token串)。我们不再使用Session认证机制,而使用Json Web Token(本质就是token)认证机制

# Json web token (JWT), JWT用在咱们前后端做登录认证的,如果登录了,就携带token过来,如果没登录,就不携带---》后端通过验证token的准确性,确定是谁访问我们


#JWT的构成--三部分
	eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
    
    # 头:header
    	-一般放公司信息,加密方式(没放秘钥)
    # 荷载:payload
    	-当前用户的信息:用户名,用户id,token过期时间。。。
    # 签名:signature
    	-第一部分和第二部分通过加密得到的字符串

3 jwt签发与认证

# 以后使用jwt,最核心的就是写两个地方
	-签发:(登录接口)
    	-登录接口,登录成功,签发token(三段式)
        -header,用base64编码,暂放
            {"company": "公司信息",}
        -payload,用base64编码,暂放
        	{用户名,用户权限,过期时间}
        -使用加密方式:md5,把header和payload 都update进md5中---》生成前面---》base64编码
        
        -三段拼接起来---》用 .  分割 
        
        
    -认证(认证类)
    	-用户携带token过来,认证
        -取出第一部分header
        -取出第二部分 payload
        -使用之前同样的加密算法(密码),得到新前面
        -跟token的第三部分比较,如果一样,表示没有被窜改,顺利继续往下走,返回两个值
        -如果被篡改了,抛异常

4 base64编码

# base64 编码

# 作用,用途:
	1 token串使用base64编码
    2 互联网中前后端数据交互,可以使用base64编码
    3 图片二进制可以使用base64编码传递
    
    

import json
import base64
img='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'



# base64 的编码和解码(字符串)
###编码
# d={'name':'lqz','age':19}
# d_str=json.dumps(d)
# res=base64.b64encode(d_str.encode('utf-8'))  # 字符串转bytes格式
# print(res)  # eyJuYW1lIjogImxxeiIsICJhZ2UiOiAxOX0=
# base64编码字符串长度必须是4的倍数,如果不足,用= 补齐,= 一定不会超过3个
# 解码
# res=base64.b64decode('eyJuYW1lIjogImxxeiIsICJhZ2UiOiAxOX0=')
# print(res)



##把图片保存到本地
res=base64.b64decode(img)
with open('xx.png','wb') as f:
    f.write(res)

5 drf-jwt使用

# django 中使用jwt

# 可以自己写,使用第三方
	-django-rest-framework-jwt:有点老
    -djangorestframework-simplejwt:新的
    -自己写:https://gitee.com/liuqingzheng/rbac_manager/blob/master/libs/lqz_jwt/token.py
    
# 下载:
pip install djangorestframework-jwt
	


5.1 django-rest-framework-jwt快速使用

# 签发:默认使用auth的user表签发--》登录接口--人家帮咱们写了
    from rest_framework_jwt.views import obtain_jwt_token # 这就是个登录接口,人家帮你写好了
    urlpatterns = [
        path('login/', obtain_jwt_token),
    ]
    
# 认证--》认证类
	-视图类上,配置认证类和权限类
    	authentication_classes = [JSONWebTokenAuthentication,]
    	permission_classes = [IsAuthenticated]
	
    

5.3 定制签发返回格式

# 自定义认证返回结果

# 写个函数
def jwt_response_payload_handler(token, user=None, request=None):
    return {
        'status': 100,
        'msg': '登录成功',
        'token': token,
        'username': user.username
    }

# 配置文件配置
JWT_AUTH = {
    'JWT_RESPONSE_PAYLOAD_HANDLER': 'app01.response.jwt_response_payload_handler',
}

5.4 源码分析

#为什么 路由这样配了,就会有个登录接口
 	path('login/', obtain_jwt_token),
    
#obtain_jwt_token 本质是ObtainJSONWebToken.as_view()

# 本质是ObtainJSONWebToken
class ObtainJSONWebToken(JSONWebTokenAPIView):
    serializer_class = JSONWebTokenSerializer
    
# 向login发送post请求,ObtainJSONWebToken一定有个post方法

# 在父类中:JSONWebTokenAPIView  post
	-登录走的是JSONWebTokenAPIView的post,签发token 是在序列化类中
    -签发完token执行了,咱们写的jwt_response_payload_handler,所以才能定制返回格式

标签:编码,签发,base64,jwt,接口,认证,token,源码
From: https://www.cnblogs.com/huangchunfang/p/17688359.html

相关文章

  • drf-jwt使用
    一、jwt介绍和构成1.介绍jwt:JsonWebToken,Web方向的Token认证方案在用户注册或登录之后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证(token串)。我们不再使用session认证机制,而使用JsonWebToken(本质就是token)认证机制。JsonWebToken:JWT用在我们前后端......
  • 闲转大学生校园二手物品在线交易平台-计算机毕业设计源码+LW文档
    1. 选题目的、意义及研究现状:背景:随着电子商务的发展,网上交易已经步入巅峰时期,交易额总额每年都会被刷新,越来越多的商品交易都转化为或者正在转化为虚拟交易。伴随着学生购买能力的提高,支付能力也越来越高,大学生购买的商品数量也逐渐增多,甚至超出了自己的需求,以至于几乎每个大学生......
  • 酒店预定的系统设计与实现-计算机毕业设计源码+LW文档
    随着计算机信息技术的发展,各种管理系统逐渐用在社会生产生活中,通过系统化管理提高办事流程,节约时间。在酒店,存在许多的服务内容,如客房预定、信息咨询、人员管理等等,这些复杂的业务信息单靠人工管理,费时费力,还容易出错。如果通过酒店管理系统进行系统化管理,可以有效的解决酒店的整个......
  • 课程教学要素管理系统设计与实现-计算机毕业设计源码+LW文档
    1.选题背景、意义随着科技的进步与发展,计算机的诞生给人们的工作和学习带来了极大的改变,人类从工业时代进入了信息时代。今天,计算机对社会的影响不断深入扩大,教育行业也不例外。在此之前,计算机对教育的影响大多局限在科研领域或者计算机领域的教学。从上个世纪七十年代中期,计算......
  • TSINGSEE青犀视频EasyDarwin开源平台源码二次开发报错service not found排查及解决
    TSINGSEE青犀视频开发的EasyDarwin开源平台提供的开源项目,拥有完整的源代码,帮助开发者更快更简单实现流媒体音视频产品功能,实现移动互联网流媒体直播点播。有位用户反馈在Windows环境下的EasyDarwin源码二次开发中,Git拉完源码,出现无法运行的情况,报:servicenotfound源码路径中找不......
  • 小区物业报修系统的设计与实现-计算机毕业设计源码+LW文档
    随着经济的发展,科技的进步,网络逐渐发达,信息产业不断改良,计算机事业也在不断地发展,人们生活水平也得到了提高。随着人们生活节奏的不断加快,高质量的生活水平以及较优越的生活环境越来越成为人们所追求的目标。但是相应的,这样也会加强人们的劳动量,居民的生活节奏也随之慢慢的加快。长......
  • 接口文档、jwt
    接口文档作为后端,接口写好了作为前端,需要使用我们写的接口(移动端、web、桌面端)后端需要写接口文档接口文档的展现形式:1、word,md,写好传到公司的某个平台,前端可以下载2、自动生成接口文档,后端通过配置,把所写的接口都自动生成,一个地址访问这个地址就能看到所有接口文档......
  • 悬赏任务大厅平台源码定制
      悬赏任务大厅平台软件一款以在线任务发布,接单,派单的系统。它能帮助用户和雇主实现各种任务的互助,该系统软件功能齐全多,需要专业化的管理系统规则机制,和后期的系统升级维护等工作。  在定制开发悬赏任务系统时,需要考虑到以下几点的问题:  1.悬赏任务大厅界面设计:软件......
  • 骑手端后台管理系统app源码
      骑手端app管理软件是基于外卖平台的其中一个端的软件,骑手端的功能从从订单接收、派送分配、路线规划、到订单完成的整个过程。本文主要解析该App源码的关键技术和实现方式。  骑手端的APP软件端,是接当地所有的外卖订单的系统,用户下单后的订单编号,所有的骑手都可以抢单子......
  • 狼人杀小游戏源码完整版软件
      狼人杀这款小游戏已经有段时间了,也是现在的小年轻时长玩的游戏,该游戏可以是手机端的也可以是网页端的。但是现在结合了亲子剧本杀的项目,发展成了一种户外的亲子剧本杀游戏,现在就介绍下关于户外剧本杀的小游戏模式,看看都有什么新的玩法吧。  户外版的狼人杀游戏属于是php......