WSGI / Django: передать имя пользователя обратно в Apache для доступа к журналу - PullRequest
9 голосов
/ 11 февраля 2010

Мое приложение Django, развернутое в mod_wsgi под Apache с использованием стандартного WSGIHandler Django, аутентифицирует пользователей через форму входа на стороне Django. Таким образом, для Apache пользователь является анонимным. Это делает журнал доступа Apache менее полезным.

Есть ли способ передать имя пользователя обратно через оболочку WSGI в Apache после обработки запроса, чтобы оно появилось в журнале доступа Apache?

(версии: Django 1.1.1, mod_wsgi 2.5, Apache 2.2.9)

Ответы [ 5 ]

4 голосов
/ 12 февраля 2010

Это можно сделать только при использовании встроенного режима и только в том случае, если вы используете отдельный пакет с именем apswigpy, который обеспечивает привязку Python для исходного объекта запроса Apache. Пакет mod_wsgi предоставляет дополнительный механизм, позволяющий передавать исходный объект запроса Apache в качестве ссылки на Python CObject в среде WSGI. Вы используете это в сочетании с apswigpy что-то вроде:

from apache.httpd import request_rec
r = request_rec(environ['apache.request_rec'])
r.user = user

По крайней мере, я думаю, что это установит соответствующую информацию, которую затем может использовать логирование доступа.

Вы действительно должны перенести это обсуждение в список рассылки mod_wsgi.

3 голосов
/ 12 февраля 2010

Вы можете использовать mod_auth_tkt . auth_tkt - это подписанный файл cookie с идентификатором пользователя, который может понять Apache. Ваше веб-приложение должно установить cookie при входе и выходе пользователя. Apache может извлечь REMOTE_USER из файла cookie, передать его в ваше веб-приложение или веб-приложение не из Django, работающее на том же сервере, включить его в журналы, что угодно.

1 голос
/ 02 мая 2012

Исправьте меня, если я ошибаюсь, но что мешает вам создать какое-то пользовательское промежуточное ПО, которое устанавливает cookie, равное отображаемому имени текущего пользователя, вошедшего в систему. Это промежуточное ПО будет работать при каждом просмотре, так что даже если технически пользователь может подделать его имя пользователя, чтобы отобразить все, что он хочет, чтобы оно отображалось, оно просто все равно будет сброшено, и это не похоже на угрозу безопасности, поскольку само имя пользователя предназначено только для целей ведения журнала, а вовсе не связано с тем, какой пользователь вошел в систему. кажется достаточно простым решением, и тогда журнал Apache может получить доступ к файлам cookie, что обеспечивает вам самый простой доступ. Я знаю, что некоторым людям не понравится идея того, что данный пользователь подделывает свое собственное имя, но я думаю, что это самое тривиальное решение, которое выполняет свою работу. Особенно в моем случае, когда это приложение для iPhone, и у пользователя нет прямого доступа к консоли javascript или к самим файлам cookie.

1 голос
/ 11 февраля 2010

Возможно, это не то, что вы ожидаете, но вы можете использовать имя пользователя в своей схеме URL. Таким образом, пользователь будет находиться в разделе пути ваших журналов apache.

Вам необходимо изменить аутентификацию, чтобы ответы, необходимые для авторизации, были очевидны в журналах apache, иначе при просмотре журналов вы можете приписывать неаутентифицированные запросы аутентифицированным пользователям. Например. вернуть временный редирект на страницу входа, если запрос не аутентифицирован.

0 голосов
/ 10 апреля 2019

для последних (Django 2.x, Apache 2.4) Протестировано

источник https://www.django -rest-framework.org / api-guide / authentication / # apache-mod_wsgi-specific-configuration

вам нужно добавить WSGIPassAuthorization on в конфигурации сервера, виртуального хоста, каталога или .htaccess

...