zoukankan      html  css  js  c++  java
  • Django rest framework JWT认证

    为何使用JWT:

    DRF自带的TokenAuthentication认证方式也非常简单,同时弊端也很大,真正项目中用的较少。

    由于需要存储在数据库表中,它在分布式系统中用起来较为麻烦,并且每次都需要查询数据库,增加数据库压力;

    同时它不支持Token的过期设置,这是一个很大的问题。

    在实际前后端分离项目中使用JWT(Json Web Token)标准的认证方式较多,每个语言都有各自实现JWT的方式。

    JWT有点:

    JWT(Json Web Token)JWT解决了两个较大的问题:

    第一,不需要把Token存储到数据库表中了,而是根据一定的算法来算出用户Token,然后每次用户来验证时再以同样的方式生成对应的Token进行校验。当然,实际JWT生成Token的方式还是较为复杂的,具体可以看JWT协议相关文章。

    第二,JWT对于生成的Token可以设置过期时间,从而在一定程度提高了Token的安全性。

    JWT的原理还是稍稍有点麻烦的,里面涉及了一些对称加密和非对称加密的算法。但是JWT使用起来确是非常简单,Python中有PyJWT库,而在DRF中也有对应的开源项目django-rest-framework-jwt

    JWT 安装

    pip install djangorestframework-jwt

    JWT 使用setting.py

    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': (
            'rest_framework.permissions.IsAuthenticated',
        ),
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        ),
    }
    
    JWT_AUTH = {
        'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300), # 过期时间
        'JWT_AUTH_HEADER_PREFIX': 'ABC', # 请求头前缀
    }
    

    添加认证路由:

    from rest_framework_jwt.views import obtain_jwt_token
    urlpatterns += [
        url(r'^api-token-auth/', obtain_jwt_token)
    ]
    

    认证请求:

    现在访问需要认证的API时,就必须要包含Authorization: JWT <your_token> 头信息

    curl -H "Authorization: JWT <your_token>" http://127.0.0.1:8000/auth/
    

      

  • 相关阅读:
    Access中出现改变字段“自己主动编号”类型,不能再改回来!(已解决)
    移动闭塞
    信号系统基本设备介绍——应答器
    行车闭塞
    计轴
    联锁
    SqlServer 查看缓存 并合理设置最大内存
    SQL Server中bcp命令的用法以及数据批量导入导出
    5 个免费的受欢迎的 SQLite 管理工具
    Qt之操作数据库(SQLite)
  • 原文地址:https://www.cnblogs.com/xiao2er/p/13355917.html
Copyright © 2011-2022 走看看