Django rest framework jwt token permission

时间:2018-06-10 11:26:02

标签: django django-rest-framework jwt token

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

例如,有user Auser Buser A撰写文章“test”时,文章“test”只能由user A修改或删除。
但是如何检测文章“测试”的许可?

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

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

提前致谢!

2 个答案:

答案 0 :(得分:0)

通过JWT身份验证,您可以识别以前注册了Django应用的用户,这要感谢他们发送给服务器的每个请求所附带的令牌。 然后,权限(您可以根据需要定义和调整形状)允许或不允许用户访问/编辑给定的资源/页面。 实际上,可以按以下步骤设置要实现的功能(假设您使用基于类的视图):

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

其中:

  • JSONWebTokenAuthentication djangorestframework-jwt 提供的身份验证类。
  • IsOwner 是您需要编写的Permission类,以检查当前用户是否是给定视图/ API终结点托管的资源的所有者。 (More on this here)。

答案 1 :(得分:-2)

确保您在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,可以控制令牌过期!