Документ описывает использование внешних источников аутентификации (когда на веб-сервере установлена переменная REMOTE_USER) в приложениях Django. Этот тип аутентификации является типичным для интранет-сайтов, использующих такие решения как IIS и Integrated Windows Authentication или Apache и mod_authnz_ldap, CAS, Cosign, WebAuth, mod_auth_sspi.
Для обеспечения наибольшей безопасности Web-сервер устанавливает переменную окружения REMOTE_USER и использует её в базовом приложении. В Django, REMOTE_USER доступна в атрибуте request.META. Настройте Django для того, чтобы задействовать переменную REMOTE_USER, используя классы RemoteUserMiddleware и RemoteUserBackend из django.contrib.auth.
Сначала нужно добавить django.contrib.auth.middleware.RemoteUserMiddleware в настройки MIDDLEWARE_CLASSES после django.contrib.auth.middleware.AuthenticationMiddleware:
MIDDLEWARE_CLASSES = (
'...',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.RemoteUserMiddleware',
'...',
)
Затем заменить ModelBackend на RemoteUserBackend в настройках AUTHENTICATION_BACKENDS:
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.RemoteUserBackend',
)
С такими настройками RemoteUserMiddleware обнаружит имя пользователя в запросе request.META['REMOTE_USER'], аутентифицирует его и выполнит вход, используя RemoteUserBackend.
Примечание
Поскольку RemoteUserBackend наследуется от ModelBackend, вам всё равно придётся проверять процедуру аутентификации, реализованную при помощи ModelBackend.
Если механизм аутентификации использует обычные HTTP-заголовки и не содержит REMOTE_USER, вы можете создать подкласс RemoteUserMiddleware и установить атрибут header с ключом request.META. Например:
from django.contrib.auth.middleware import RemoteUserMiddleware
class CustomHeaderMiddleware(RemoteUserMiddleware):
header = 'HTTP_AUTHUSER'
При необходимости большего контроля допускается создание собственного бэкенда(backend) аутентификации, который должен наследоваться от RemoteUserBackend и отменять кое-что:
Mar 30, 2016