Как пройти аутентификацию в приложении Django с помощью RemoteUserBackend
Мое приложение требуется для поддержки пользователей, вошедших в систему через единый вход на стороннем сервере.
Я настроил settings.py
на основании документов, т.е.
MIDDLEWARE_CLASSES = [
'...',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.PersistentRemoteUserMiddleware',
'...',
]
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.RemoteUserBackend',
]
Я попытался проверить это с помощью Postman на нескольких URL-адресах приложения без авторизации и с базовой аутентификацией (пользователь определен) и, конечно же, с REMOTE_USER
(И / или HTTP_REMOTE_USER
заголовок установлен). Во всех случаях я получаю 401 - unauthorized
код. Кроме того, точка останова в authenticate
никогда не называется. process_request
в промежуточном программном обеспечении называется, но REMOTE_USER
заголовок не в request.META
,
Что еще мне нужно настроить (в Django, Postman - или, что еще лучше, в Apache), чтобы REMOTE_USER
будет установлен? Мои знания Apache минимальны, поэтому ссылка на пример очень поможет.
Самое близкое "решение", которое я увидел, заключается в следующем, но кажется, что человек обошел правильный способ сделать это.
ОБНОВИТЬ Запрос почтальона относится к одной из базовых служб, которая требует входа пользователей (@login_required
декоратор в Django) Я пробовал как с базовой аутентификацией, так и без аутентификации. Ответ 401 без дополнительной информации.
>curl -i -H 'REMOTE_USER: user' localhost:9000/project/files/
HTTP/1.0 401 Unauthorized
Date: Sun, 17 Dec 2017 13:38:38 GMT
Server: WSGIServer/0.1 Python/2.7.10
Expires: Sun, 17 Dec 2017 13:38:38 GMT
Vary: Cookie
Last-Modified: Sun, 17 Dec 2017 13:38:38 GMT
Location: /accounts/login/?next=/project/files/
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
X-Frame-Options: SAMEORIGIN
Content-Type: text/html; charset=utf-8
Та же команда с cURL. Местоположение, похоже, предполагает, что он пытался перенаправить на страницу входа (что не должно происходить)