Замена базовой аутентификации в Django Rest Framework - PullRequest
0 голосов
/ 09 июля 2019

В настоящее время у меня есть базовая настройка аутентификации Django с аутентификацией токена Knox.Обычной аутентификации недостаточно для производственной работы, поэтому я хочу заменить ее.Есть ли у Django еще один authentication_class на основе пароля, который я могу легко заменить BasicAuthentication, или это более сложный процесс?Если да, то с чего мне начать?

мой API-интерфейс входа в систему:

class UserLoginView(GenericAPIView):
  serializer_class = UserOrganizationSerializer
  authentication_classes = (BasicAuthentication,)
  permission_classes = (IsAuthenticated,)

  def post(self, request):
      """User login with username and password."""
      token = AuthToken.objects.create(request.user)
      return Response({
        'user': self.get_serializer(request.user).data,
        'token': token
      })

мои классы аутентификации по умолчанию:

REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [],
'DEFAULT_AUTHENTICATION_CLASSES': [
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication',
],

1 Ответ

1 голос
/ 10 июля 2019

Один из наиболее распространенных способов - использовать веб-токен JSON (JWT).Базовый пакет - django-rest-framework-jwt .Инструкции довольно ясны в документации , но вот обзор:

$> pip install djangorestframework-jwt

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

Добавьте шаблоны URL

url_patterns = [ 
    path('jwt/', obtain_jwt_token, name='jwt'),
    ...
]

Получить токен (используя отличный httpie утилита)

http post localhost:8000/api/jwt/ username=u password=p
{
    "token": "REALLY-LONG-TOKEN"
}

Используйте этот токен для отправки запроса:

http get localhost:8000/api/some-endpoint/ Authorization:"JWT REALLY-LONG_TOKEN"

Некоторые заметки

  • JWT-токены означает, что может быть расшифровано клиентом.Они защищены подписью, поэтому их нельзя изменить
  • Вы можете расшифровать токен ( онлайн ) и посмотреть время истечения срока действия и другие данные
  • Жетоны могутобновляться или проверяться с помощью других URL-адресов, предоставляемых пакетом
  • В конечном итоге обновление завершится неудачно, и пользователю потребуется снова войти в систему.Этот временной интервал настраивается (см. Мой ответ на этот другой вопрос )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...