JWT Token过期时间增加

Posted

技术标签:

【中文标题】JWT Token过期时间增加【英文标题】:JWT Token expiration time increase 【发布时间】:2018-11-19 12:22:38 【问题描述】:

我已将 JWT 令牌与 django-restframwork 集成,在这里我设置了过期时间 15 分钟 JWT_EXPIRATION_DELTA 但它在提到的时间(1 分钟)之前过期,我需要刷新令牌才能继续... PFB me 配置

Python 3.5
Django==2.0.5
djangorestframework==3.8.2
djangorestframework-simplejwt==3.2.3

设置.py

REST_FRAMEWORK = 
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    )
 

JWT_AUTH = 
    'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=900),
    'JWT_ALLOW_REFRESH': True,
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),

请帮忙,我这里有什么错误吗。

【问题讨论】:

【参考方案1】:

您仍然可以使用 djangorestframework-simplejwt 并改为修改设置文件中的时间

settings.py

from datetime import timedelta

...

SIMPLE_JWT = 
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': False,
    'BLACKLIST_AFTER_ROTATION': True,

    'ALGORITHM': 'HS256',
    'SIGNING_KEY': settings.SECRET_KEY,
    'VERIFYING_KEY': None,

    'AUTH_HEADER_TYPES': ('Bearer',),
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',

    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
    'TOKEN_TYPE_CLAIM': 'token_type',

    'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
    'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
    'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),

退房 https://github.com/davesque/django-rest-framework-simplejwt

【讨论】:

【参考方案2】:

您使用的是djangorestframework-simplejwt,但您的配置是针对djangorestframework-jwt。请卸载djangorestframework-simplejwt,然后安装djangorestframework-jwt

pip uninstall djangorestframework-simplejwt

然后

pip install djangorestframework-jwt 更多详情here

【讨论】:

在 django 中实现 jwt 的最佳库难道不是 django-rest-framework-simplejwt (github.com/jazzband/django-rest-framework-simplejwt) 而不是 djangorestframework-jwt (github.com/jpadilla/django-rest-framework-jwt),因为后者现在没有维护?您分享的链接 (getblimp.github.io/django-rest-framework-jwt) 现在给出了 404

以上是关于JWT Token过期时间增加的主要内容,如果未能解决你的问题,请参考以下文章

JWT生成token及过期处理方案

jwt token 过期时间(asp.net core)

关于Jwt的一些思考

JWT生成token及过期处理方案

JWT如何解析过期的token中的信息

JWT如何解析过期的token中的信息