9

我的 Django 应用程序使用 Django 的标准 WSGIHandler 部署在 Apache 下的 mod_wsgi 中,通过 Django 端的表单登录对用户进行身份验证。所以对于 Apache,用户是匿名的。这会降低 Apache 访问日志的用处。

有没有办法在处理请求后通过 WSGI 包装器将用户名传递回 Apache,以便它出现在 Apache 访问日志中?

(版本:Django 1.1.1、mod_wsgi 2.5、Apache 2.2.9)

4

5 回答 5

4

只有在使用嵌入式模式并且仅当您使用名为 apswigpy 的单独包时才能执行此操作,该包为原始 Apache 请求对象提供 Python 绑定。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 邮件列表。

于 2010-02-11T22:21:04.213 回答
3

您可以使用mod_auth_tkt。Anauth_tkt是一个带有 Apache 可以理解的用户 ID 的签名 cookie。当用户登录和注销时,您的 Web 应用程序必须设置 cookie 。Apache 可以REMOTE_USER从 cookie 派生 a,将其传递给您的 Web 应用程序或在同一服务器上运行的非 Django Web 应用程序,将其包含在日志中,等等。

于 2010-02-11T22:30:16.243 回答
1

这可能不是您所期望的,但您可以在 URL 方案中使用用户名。这样,用户将位于 apache 日志的路径部分。

您需要修改您的身份验证,以便在 apache 日志中显示需要身份验证的响应,否则在查看日志时,您可能会将未经身份验证的请求归因于经过身份验证的用户。例如,如果请求未通过身份验证,则返回一个临时重定向到登录页面。

于 2010-02-11T12:17:06.573 回答
1

如果我错了,请纠正我,但是是什么阻止您创建一些自定义中间件,该中间件将 cookie 设置为等于当前登录用户的显示名称。该中间件将在每个视图上运行,因此即使从技术上讲用户可以欺骗他的用户名来显示他想要显示的任何内容,无论如何它都会被重置,这不像是安全风险,因为用户名本身只是用于日志目的,与实际登录的用户完全无关。这似乎是一个足够简单的解决方案,然后 Apache 日志可以访问 cookie,从而为您提供最简单的访问。我知道有些人不喜欢给定用户欺骗自己的用户名的想法,但我认为这是完成工作的最简单的解决方案。特别是在我的情况下,当它是一个 iPhone 应用程序并且用户没有

于 2012-05-02T02:32:26.187 回答
0

最新(Django 2.x,Apache 2.4)测试

来源https://www.django-rest-framework.org/api-guide/authentication/#apache-mod_wsgi-specific-configuration

您需要添加WSGIPassAuthorization on服务器配置、虚拟主机、目录或 .htaccess

于 2019-04-10T14:14:10.513 回答