Я использую простой JWT для аутентификации в проекте DRF. Когда я пытаюсь получить доступ к этому api, он показывает bad_authorization_header
Я использую простой jwt для моего проекта django rest framework. Я пытался получить доступ с помощью барьерного токена в postman, но он выдает эту ошибку
{
"detail": "Authorization header must contain two space-delimited values",
"code": "bad_authorization_header"
}
Код моего файла настроек
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
}
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(days=15),
"REFRESH_TOKEN_LIFETIME": timedelta(days=1),
"ROTATE_REFRESH_TOKENS": True,
"AUTH_HEADER_TYPES": ('Bearer',),
"AUTH_TOKEN_CLASSES": ("rest_framework_simplejwt.tokens.AccessToken", )
}
просматривает код файла
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def all_users(request):
users = CustomUser.objects.all().order_by('id')
serializers = UserSerializer(users, many=True)
return Response({
'All users':serializers.data
}, status.HTTP_200_OK)
в postman мой ввод для токена Bearer был таким
Носитель < токена доступа >
Ошибка во время процесса get_raw_token для класса JWTAuthrozation в библиотеке simplejwt.
Функция get_raw_token проверяет правильность значения поля Authorization Header, переданного клиентом, и возвращает только значение токена.
class JWTAuthentication(authentication.BaseAuthentication):
...
def get_raw_token(self, header: bytes) -> Optional[bytes]:
"""
Extracts an unvalidated JSON web token from the given "Authorization"
header value.
"""
parts = header.split()
if len(parts) == 0:
# Empty AUTHORIZATION header sent
return None
if parts[0] not in AUTH_HEADER_TYPE_BYTES:
# Assume the header does not contain a JSON web token
return None
if len(parts) != 2:
raise AuthenticationFailed(
_("Authorization header must contain two space-delimited values"),
code="bad_authorization_header",
)
return parts[1]
В последнем условном операторе задающий вопрос был истинным, что привело к ошибке.
Здесь значение переменной части - это значение, полученное путем разделения значения поля заголовка авторизации, доставленного клиентом, на пробелы.
Если вы посмотрите на мой тест, то значение Authorization будет таким
"Носитель {access_token}"
В приведенном выше случае метод get_raw_token присваивает эти значения переменной parts.
[b'Bearer', b'{access_token}']
Мой тест сдан в правильной форме, так что проблем нет.
Ошибка, которая возникла у вас, это когда количество частей не равно 2.
Это происходит, когда в значении Authorization слишком много пробелов.
вот так Я дал .ey пустое место, в отличие от предыдущих.
Убедитесь, что задающий вопрос передал значение Authorization в правильной форме при его передаче.