JWT的快速使用

jwt的签发和认证

  保证安全

  签发--登陆过程:

    1、用基本信息公司信息存储json字典,采用base64算法得到 头字符串

    2、用关键信息存储json字典,采用base64算法得到 荷载字符串,过期时间,用户id,用户名

    3、用头、体加密字符串通过加密算法+秘钥加密得到 签名字符串,拼接成token返回给前台

   如果没有第三方模块帮助我们做,我们就自己做

  认证---访问需要登陆的接口

    1、将token按 . 拆分为三段字符串,第一段 头加密字符串 一般不需要做任何处理

    2、第二段 体加密字符串,要反解出用户主键,通过主键从User表中就能得到登录用户,过期时间是安全信息,确保token没过期

    3、再用 第一段 + 第二段 + 加密方式和秘钥得到一个加密串,与第三段 签名字符串 进行比较,通过后才能代表第二段校验得到的user对象就是合法的登录用户

Django中的快速使用JWT

  Django中的两个JWT

    1、django-rest-framework-jwt

      地址:https://github.com/jpadilla/django-rest-framework-jwt

    2、django-rest-framework-simplejwt

      地址:https://github.com/jazzband/djangorestframework-simplejwt

  Django中快速使用

    1、签发

      第一步:

pip3 install djangorestframework-jwt

      第二步:在路由中配置

from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
    path('login/', obtain_jwt_token),
]

    第三步:使用接口测试工具发送post请求到后端,就能基于auth的user表签发token

   2、认证

    在视图类中配置:认证类+权限类

from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.permissions import IsAuthenticated
class BookView(GenericViewSet,ListModelMixin):
    # JSONWebTokenAuthentication :rest_framework_jwt模块写的认证类
    authentication_classes = [JSONWebTokenAuthentication,]
    # 需要配合一个权限类
    permission_classes = [IsAuthenticated,]

 JWT定制返回格式

  第一步:写一个函数--->返回什么格式,前端就能看到什么格式

    def jwt_response_payload_handler(token, user=None, request=None):
    return {
        'code': 100,
        'msg': "登陆成功",
        'token': token,
        'username': user.username

    }

  第二步:在配置文件中配置

  # jwt模块的配置文件,统一放在JWT_AUTH
  JWT_AUTH = {
      'JWT_RESPONSE_PAYLOAD_HANDLER': 'app01.utils.jwt_response_payload_handler',
  }

 

posted @ 2022-04-11 21:22  那就凑个整吧  阅读(54)  评论(0编辑  收藏  举报