当前位置:   article > 正文

Django JWT验证_django jwt 认证

django jwt 认证

什么是JSON Web Token(JWT)?

JSON Web Token,简称JWT,是一种开放标准(RFC 7519),用于在网络上传输信息,特别是在身份验证和授权方面。JWT是一串编码后的JSON格式字符串,它由三个部分组成:头部(Header)、负载(Payload)和签名(Signature)。

Header

头部包含了两个部分:令牌类型(即JWT)和哈希算法(例如HMAC SHA256或RSA)。它使用Base64编码。

Payload

负载包含了要传输的数据,例如用户ID、角色、访问权限等。它也使用Base64编码。

Signature

签名是JWT的第三部分,它使用头部和负载中的数据以及一个密钥来生成。它用于验证消息的完整性和验证发送方的身份。它也使用Base64编码。

整个JWT看起来像这样:xxxxx.yyyyy.zzzzz

Django JWT验证

在Django中,我们可以使用第三方库djangorestframework-jwt来实现JWT的验证。

安装

我们首先需要安装djangorestframework-jwt库。可以通过以下命令进行安装:

pip install djangorestframework-jwt
  • 1

配置

settings.py文件中添加以下内容:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
}

JWT_AUTH = {
    'JWT_SECRET_KEY': SECRET_KEY,
    'JWT_ALGORITHM': 'HS256',
    'JWT_ALLOW_REFRESH': True,
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=30),
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

这里需要注意的是,JWT_SECRET_KEY是必须的,它用于生成签名。如果没有指定,则默认从Django的SECRET_KEY中获取。JWT_EXPIRATION_DELTA指定了JWT的过期时间,这里设置为7天。JWT_REFRESH_EXPIRATION_DELTA指定了JWT的刷新时间,这里设置为30天。

创建Token

要创建JWT,我们需要调用jwt_encode_handler

from rest_framework_jwt.utils import jwt_encode_handler

payload = {
    'user_id': user.id,
    'username': user.username,
}

jwt_token = jwt_encode_handler(payload)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里的payload包含了我们要传输的数据,例如用户ID和用户名。

验证Token

在视图中,我们可以使用@jwt_authentication_classes装饰器来验证JWT:

from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response

@api_view(['GET'])
@authentication_classes([JSONWebTokenAuthentication])
@permission_classes([IsAuthenticated])
def my_view(request):
    content = {'message': 'Hello, World!'}
    return Response(content)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这里的@authentication_classes([JSONWebTokenAuthentication])@permission_classes([IsAuthenticated])是必须的,它们用于验证JWT并确定用户是否已通过身份验证。

刷新Token

如果JWT已过期,我们可以使用jwt_refresh_handler来刷新它:

from rest_framework_jwt.utils import jwt_refresh_handler

new_jwt_token = jwt_refresh_handler(jwt_token)
  • 1
  • 2
  • 3

这里的jwt_token是我们之前生成的JWT,new_jwt_token是刷新后的JWT。

总结

Django JWT验证是一种安全的身份验证方法,通过使用djangorestframework-jwt库,我们可以轻松地实现JWT的创建、验证和刷新。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/893740
推荐阅读
相关标签
  

闽ICP备14008679号