首页 文章

Django休息框架jwt令牌权限

提问于
浏览
0

现在我用Django rest-framework制作了一些API . 我使用JWT进行令牌认证 .
此时,我对令牌权限有一些疑问 .
如何在Django中检测令牌权限?

例如,有 user Auser B .
user A 写文章"test"时,文章"test"只能由 user A 编辑或删除 .
但是如何检测文章"test"的许可?

每次用户登录时,令牌都会被更改 . 因此,通过令牌检测不是正确的方法 .

我搜索谷歌几个小时,如果有任何解决方案 . 有没有办法通过令牌确定用户权限?

提前致谢!

2 回答

  • 0

    确保在settings.py中有以下JWT设置dict:

    JWT_AUTH = {
        'JWT_ENCODE_HANDLER':
        'rest_framework_jwt.utils.jwt_encode_handler',
    
        'JWT_DECODE_HANDLER':
        'rest_framework_jwt.utils.jwt_decode_handler',
    
        'JWT_PAYLOAD_HANDLER':
        'rest_framework_jwt.utils.jwt_payload_handler',
    
        'JWT_PAYLOAD_GET_USER_ID_HANDLER':
        'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',
    
        'JWT_RESPONSE_PAYLOAD_HANDLER':
        'rest_framework_jwt.utils.jwt_response_payload_handler',
    
        'JWT_SECRET_KEY': settings.SECRET_KEY,
        'JWT_GET_USER_SECRET_KEY': None,
        'JWT_PUBLIC_KEY': None,
        'JWT_PRIVATE_KEY': None,
        'JWT_ALGORITHM': 'HS256',
        'JWT_VERIFY': True,
        'JWT_VERIFY_EXPIRATION': True,
        'JWT_LEEWAY': 0,
        'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
        'JWT_AUDIENCE': None,
        'JWT_ISSUER': None,
    
        'JWT_ALLOW_REFRESH': False,
        'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
    
        'JWT_AUTH_HEADER_PREFIX': 'JWT',
        'JWT_AUTH_COOKIE': None,
    }
    

    通过适当地设置 JWT_EXPIRATION_DELTA ,可以控制令牌到期!

  • 0

    JWT身份验证允许您识别之前已注册Django应用程序的用户,这要归功于他们发送到您的服务器的每个请求附带的令牌 . 然后,权限(您根据需要定义和整形)允许您允许或不允许用户访问/编辑给定的资源/页面 . 更实际的是,您想要实现的目标可以设置如下(假设您使用基于类的视图):

    class MyApiEndpoint(ApiView):
        authentication_classes = (JSONWebTokenAuthentication,)
        permission_classes = (IsOwner,)
    

    哪里:

    • JSONWebTokenAuthentication是djangorestframework-jwt提供的身份验证类 .

    • IsOwner是一个Permission类,您需要编写该类以检查当前用户是否是给定视图/ API endpoints 托管的资源的所有者 . (More on this here) .

相关问题