jwt token

摘要:
REST_ FRAMEWORK={#异常处理用户定义的异常处理类“Exception_HANDLER”:用于记录日志记录器=logging,

jwt使用配置:

settings文件中添加:

jwt token第1张jwt token第2张
REST_FRAMEWORK = {
    # 异常处理 自定义的异常处理类
    'EXCEPTION_HANDLER': 'drf_meiduo.utils.exceptions.exception_handler',

    'DEFAULT_AUTHENTICATION_CLASSES': (
        # 引入JWT认证机制
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}

JWT_AUTH = {
    #设置jwt的有效时间
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
}
View Code
jwt token第3张jwt token第4张
import logging

from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework.response import Response
from rest_framework import status

from django.db import DatabaseError
from redis.exceptions import RedisError

# 获取在配置文件中定义的logger,用来记录日志
logger = logging.getLogger('django')

def exception_handler(exc, context):
    """
    自定义异常处理
    :param exc: 异常
    :param context: 抛出异常的上下文
    :return: Response响应对象
    """
    # 调用drf框架原生的异常处理方法
    response = drf_exception_handler(exc, context)

    if response is None:
        # 获取异常视图对象
        view = context['view']
        if isinstance(exc, DatabaseError) or isinstance(exc, RedisError):
            # 数据库异常
            logger.error('[%s] %s' % (view, type(exc)))
            response = Response({'message': '服务器内部错误'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

    return response
自定义异常处理类

示例代码:django-restframework已经封装好了。

jwt token第5张jwt token第6张
Django REST framework JWT提供了登录签发JWT的视图,可以直接使用

from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    url(r'^authorizations/$', obtain_jwt_token),
]
注:默认JWT扩展登录视图的返回值仅有token,我们还需在返回值中增加username和user_id。

3. 自定义JWT扩展登录视图响应数据函数
1)在users/utils.py 中,创建

def jwt_response_payload_handler(token, user=None, request=None):
    """
    自定义jwt认证成功返回数据
    """
    return {
        'token': token,
        'user_id': user.id,
        'username': user.username
    }
2)修改配置文件

# JWT扩展配置
JWT_AUTH = {
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
    'JWT_RESPONSE_PAYLOAD_HANDLER': 'users.utils.jwt_response_payload_handler',
}
View Code

1 ,session 认证机制:

1,用户登录,传递用户名和密码给客户端
2,服务器进行用户名和密码的校验,如果校验成功,将用户保存到session
3,将sessionid通过cookie返回给客服端,客服端会保存sessionID
4,客服端再次访问服务器,会携带cookie:sessionID ,服务端就可以获取对应的session信息,然后对用户的身份进行校验

  session认证存在的问题:

  1,session 信息存放在服务器端,如果用户过多,就占用过多的服务器的存储空间

  2,session 依赖于cookie,如果cookie被截获,可能产生csrf跨站请求伪造

  3,在分布式网站应用中,如果session存储到服务器的内存,session共享会用问题

2 ,jwt 认证机制

jwt token第7张

jwt token 组成:

  字符串,由头部(header),载荷(payload)和签名(signatrue)3部分组成,用.隔开(点号)

 1,头部(header):存储的是token类型和签名加密的算法

    {‘token类型’,‘签名加密算法’}  对头部内容使用base64进行加密,生成的就是header

 2,载荷(payload):存储有效的数据和token的有效时间

    {"user_id": "用户id",

      "username": "用户名"

      "mobile": "15211111111"

      ...

      "exp": "token有效时间"}

   对载荷内容进行base64加密,生成的内容就是payload

  3,签名(signature):作用:防止jwt token 被伪造

  jwt token第8张

jwt 使用注意点:

  • payload载荷不要存过于敏感数据

  • 服务器需要保存好签名加密密钥

  • 可以使用安全网络协议:https

jwt扩展使用:

​ 功能:生成jwt token和校验jwt token

免责声明:文章转载自《jwt token》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇tomcat和nginx配置java服务器centos 配置rsync+inotify数据实时同步2下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

kubernetes 集群的安装部署

本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 首先kubernetes得官方文档我自己看着很乱,信息很少,所以结合了很多博客搭建的 其次因为既然用到docker,当然离不开kubernetes管理,还有swarm,前者管理复杂,但功能齐全 这里仅仅是安装部署,还...

zjfc1076 online judge 对多行字符串输入做处理

题目描述 Ignatius is building an Online Judge, now he has worked out all the problems except the Judge System. The system has to read data from correct output file and user's result...

videojs做直播、弹幕

从上一年开始,我们开始接触直播,现在直播成本真的很低,很多CDN供应商都有提供,本文只是大概讲述播放器这个话题。 开始调研 播放格式,我挑了三种。分别是HLS,RTMP,HTTP-FLV。 下面简单说说区别,如果不做移动端,HTTP-FLV是最优选择,也是当前主流直播网站所用的格式。HLS在videojs中也有js的实现,即使是不支持hls,也能让它支持,...

IIS访问磁盘映射下的目录文件解决方案

需求场景: 现有两台服务器,A服务器相当于文件实际存储服务器,需要开放共享磁盘目录(比如D://data),供同内网的B服务器来访问调用;B服务器上部署了后台netcore项目程序和IIS,需要在B服务器上添加A服务器共享的磁盘映射目录,然后通过B服务器上IIS部署的后台程序,去对映射磁盘目录下进行文件上传,下载,在线浏览等操作; A服务器:使用已存在的账...

elasticsearch的服务器响应异常及解决策略(转)

详述: 1 _riverStatus Import_fail  问题描述: 发现有个索引的数据同步不完整,在 http://192.168.1.17:9200/_plugin/head/ 在browse - river里看到 _riverStatus Import_fail 查看 elasticsearch 的log发现 有几条数据由于异常造成同步失败,处...

My97日期控件My97DatePicker使用(备忘)

前言: 最近老是找不到资料,痛之又痛的情况下,决定好好将所有涉及到的东西通通做个备忘记录。 参考网址: 1、http://www.my97.net/dp/demo/index.htm 2、http://www.mysuc.com/test/My97DatePicker/#m246 使用备忘—— 日期:2010-10-30 版本:4.7 功能:两个日期文本框...