Django остальные рамки разрешение JWT токен - PullRequest
0 голосов
/ 10 июня 2018

Теперь я сделал несколько API с Django rest-framework.И я использовал JWT для аутентификации токена.
На данный момент у меня есть несколько вопросов о разрешении токена.
Как я могу определить разрешение токена в Django?

Например, есть user A иuser B.
Когда user A написал статью "test", статья "test" может быть отредактирована или удалена только с помощью user A.
Но как я могу определить разрешение на статью "test"?

Токен будет меняться каждый раз при входе пользователя в систему.Так что обнаружение по токену - неправильный способ.

Я искал в Google несколько часов, если есть какое-то решение по этому поводу.Есть ли способ определить разрешение пользователя по токену?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 02 августа 2018

Аутентификация JWT позволяет идентифицировать пользователя, который ранее зарегистрировался в вашем приложении Django, благодаря токену, прикрепленному к каждому запросу, который они отправляют на ваш сервер.Затем разрешение (которое вы определяете и формируете по своему усмотрению) позволяет вам разрешать или не разрешать пользователю доступ / редактирование данного ресурса / страницы.На практике то, чего вы хотите достичь, может быть настроено следующим образом (при условии, что вы используете представления на основе классов):

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

где:

  • JSONWebTokenAuthentication это класс аутентификации, предоставленный djangorestframework-jwt .
  • IsOwner - это класс разрешений, который необходимо написать, чтобы проверить, является ли текущий пользователь владельцем ресурса, размещенного назаданная точка зрения / конечная точка API.( Подробнее об этом здесь ).
0 голосов
/ 10 июня 2018

Убедитесь, что в настройках указаны следующие параметры JWT.py:

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 можно контролировать срок действия токена!

...