Django имя пользователя / пароль и ключ API аутентификации JWT - PullRequest
0 голосов
/ 10 октября 2018

У меня есть некоторые требования, когда мне нужно иметь возможность аутентифицировать пользователя либо с username/password, либо с api_key и возвращать токен JWT для обоих случаев.

Мой подход с именем пользователя / паролем:

 if request.data['email'] and request.data['password']:
            try:
                user = User.objects.get(email=request.data['email'])
            except User.DoesNotExist:
                return Response({'Error': "Invalid username."}, status=status.HTTP_400_BAD_REQUEST)

            if user:
                if user.check_password(request.data['password']):
                    payload = jwt_payload_handler(user)
                    token = jwt_encode_handler(payload)

                    exp = datetime.now() + api_settings.JWT_EXPIRATION_DELTA
                    return Response({'token': token,
                                     'exp': format(exp, 'U')},
                                    status=status.HTTP_200_OK)
                else:
                    return Response({'Error': "Invalid password."}, status=status.HTTP_400_BAD_REQUEST)

, где jwt_payload_handler реализован как:

def jwt_payload_handler(user):
 payload = {
        "id": user.id,
        "date": get_user_join_date(user),
        "username": user.username,  }
 return payload

Один из моих вопросов - не нужно ли указывать ключевое слово в полезной нагрузке токенабыть верным ?

Каким будет хороший подход в случае, если ключ api_key считает, что ключ не связан с пользователем?

Должен ли я создать пользователя по умолчанию, который будет использоваться в полезной нагрузке, если указан правильный api_key?

Есть предложения?

1 Ответ

0 голосов
/ 10 октября 2018

Да, вы можете создать пользователя по умолчанию для использования с ключом API.Конечно, это будет означать, что данные передаются всем, кто использует этот ключ API, что может быть хорошо в вашем случае использования.

Помните, что существуют уязвимости, связанные с использованием только одного ключа API.Если ключ API скомпрометирован, вам нужно будет отправить новый ключ каждому пользователю вашего API.Рассмотрим создание отдельного токена API для каждого потребителя вашего API , так же как каждый потребитель имеет свое имя пользователя / пароль.Таким образом, если потребитель скомпрометирует свой токен API, вам нужно только сгенерировать новый для этого конкретного потребителя.

...