首页 > 其他分享 >接口文档、jwt

接口文档、jwt

时间:2023-09-08 17:35:31浏览次数:39  
标签:base64 jwt 接口 认证 token 文档

接口文档

作为后端,接口写好了

作为前端,需要使用我们写的接口(移动端、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自动生成:

  1、pip install coreapi

  2、设置接口文档访问路径

      from rest_framework.documentation import include_docs_urls 

    urlpatterns = [
        ...
        path('docs/', include_docs_urls(title='站点页面标题'))
      ]

  3、在视图中,加注释

  4、配置文件配置

  'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',

  

 

jwt介绍和构成

做会话保持的发展历史

 jwt (Json Web Token):web方向的token认证方案

在用户注册登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证(token串)。我们不再使用session认证机制,而使用Json Web Taken(本质就是token)认证机制

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

JWT的构成:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

头:header (一般放公司信息,加密方式(这里没有放密钥))

荷载:payload

  当前用户信息:用户名,用户id,token过期时间

签名:signature

  第一部分和第二部分通过加密得到的字符串 

 

 

jwt签发与认证

以后使用jwt,最核心的就是写两个地方

  1、签发:(登录接口)

    登录接口,登录成功,签发token(三段式)

    header,用base64编码,暂放

      {"company": "公司信息",}

    payload,用base64编码,暂放

      {用户名,用户权限,过期时间}

    使用加密方式:md5,把header和payload都update进md5中,生成前面,base64编码

    三段拼接起来,用 . 分割

  2、认证(认证类)

      用户携带token过来,认证

      取出第一部分header

      取出第二部分payload

      使用之前同样的加密算法(密码),得到新前面

      跟token的第三部分比较,如果一样,表示没有被篡改,顺利继续往下走,返回两个值

      如果被篡改了,就抛异常

 

base64编码

base64编码

作用,用途

1、token串使用base64编码

2、互联网中前后端数据交互,可以使用base64编码

3、图片二进制可以使用base64编码传递

 

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)

def-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

 

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]

 

定制签发返回格式

自定义认证返回结果

写个函数

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',
}

 

源码分析

路由配了,就会有个登录接口

  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/YeeQX/p/17688146.html

相关文章

  • 释放开发人员生产力:“文档级”代码了解一下?
    网上一个经久不衰的段子:程序员最讨厌的四件事:1、 写注释2、 写文档3、 别人不写注释4、 别人不写文档今天我们就来聊聊让开发人员“看不惯又干不掉”的文档。**一、文档的重要性**高质量文档是记录和传达信息的有效工具,可以帮助人们理解和遵守规范、政策和程序。它们还......
  • 苏宁API接口解析,实现获得suning商品详情
    要解析苏宁API接口并实现获取苏宁商品详情,你需要按照以下步骤进行操作:了解苏宁开放平台:访问苏宁开放平台官网,找到API接口相关的开发者文档、指南等信息。注册开发者账号:在苏宁开放平台上注册一个开发者账号,创建应用并获取API权限。获取API密钥:为了使用苏宁API接口,你需要获取API密钥......
  • 业务开发时,接口不能对外暴露怎么办?
    在业务开发的时候,经常会遇到某一个接口不能对外暴露,只能内网服务间调用的实际需求。面对这样的情况,我们该如何实现呢?今天,我们就来理一理这个问题,从几个可行的方案中,挑选一个来实现。1.内外网接口微服务隔离将对外暴露的接口和对内暴露的接口分别放到两个微服务上,一个服务里所有的......
  • 视频汇聚平台EsayNVR基于国网B接口的设备注册流程与鉴权技术分享
    国网B接口是用于国家电网视频监控系统内部的接入协议,主要用于视频监控系统与前端系统之间的交互。我们最近一直在研究该接口的接入开发,现在分享一些技术干货。1、接口描述①注册属于数据接口,采用SIP标准协议,URI中的用户名应为下级平台的地址编码。②注册过程需要进行鉴权,使......
  • GB国标28181协议下设备接入EasyCVR后,如何调用接口获取RTMP和RTSP视频流
    EasyCVR是一款安防视频监控平台,具有强大的可拓展性、灵活的视频能力和轻快的部署特性。它支持多种主流标准协议,包括国标GB28181、RTSP/Onvif、RTMP等,并能够接入各个厂家的私有协议与SDK,例如海康Ehome、海大宇等设备的SDK。该平台不仅具备传统安防视频监控的功能,如视频监控直播、云......
  • 利用API商品数据接口可以创造多种便利,以下通过几个具体例子来说明
    在当今的数字化时代,API商品数据接口为许多企业和开发者提供了强大的资源。通过API商品数据接口,我们可以轻松地获取到各种商品信息,包括但不限于价格、库存、商品描述等,从而为我们创造便利。本文将通过几个具体例子来探讨如何利用API商品数据接口给我们创造便利。首先,API商品数据接口......
  • RDMA-内核接口-rxe_map_mr_sg
    描述:映射mr的sg调用链:此处多处调用staticintnvme_rdma_map_sg_fr(structnvme_rdma_queue*queue,    structnvme_rdma_request*req,structnvme_command*c,    intcount){   req->mr=ib_mr_pool_get(queue->qp,&queue->qp->rdma_mrs);  /*  ......
  • 国标GB28181视频监控EasyGBS接入大量通道时,创建角色接口未响应的问题解决方法
    EasyGBS是一款基于国标GB28181协议的视频云服务平台。它支持多路设备同时接入,并能将视频流以RTSP、RTMP、FLV、HLS、WebRTC等格式分发到多个平台和终端。该平台提供了视频监控直播、云端录像、云存储、检索回放、智能告警、语音对讲、平台级联等功能。在视频能力方面,GB28181视频监......
  • RTSP协议视频智能安防监控平台EasyNVR的录像播放及下载接口支持返回在线m3u8格式视频
    随着视频智能安防监控系统的普及,安防监控平台在各行各业的项目中得到了广泛应用。未来,AI智能将成为安防监控的主导方向。为了满足行业需求,TSINGSEE青犀视频不断提升现有产品的适应能力,进一步推动智能安防监控系统的发展。目前,EasyNVR作为TSINGSEE青犀视频开发的稳定可靠的智能安防......
  • JavaScript—DOM(文档对象模型)
    目录DOM是什么?DOM有什么作用?一、事件理解事件事件怎么写(要做什么就写什么)?实战演练1、页面加载完毕以后,打印一句话2、如果有一个a标签,并给其添加一个点击事件3、事件默认处理程序二、对节点进行增删改查节点是有类型(文件节点,元素节点,属性节点)为节点添加事件的方法如何获得节点?1、获......