将apache2摘要认证信息传递给由mod_wsgi运行的wsgi脚本

9 投票
2 回答
4696 浏览
提问于 2025-04-11 09:21

我有一个指令

<VirtualHost *>
    <Location />
        AuthType Digest
        AuthName "global"
        AuthDigestDomain /
        AuthUserFile /root/apache_users
        <Limit GET>
            Require valid-user
        </Limit>
    </Location>
    WSGIScriptAlias / /some/script.wsgi
    WSGIDaemonProcess mywsgi user=someuser group=somegroup processes=2 threads=25
    WSGIProcessGroup mywsgi
    ServerName some.example.org
</VirtualHost>

我想知道在 /some/script.wsgi 这个文件里

def application(environ, start_response):
    start_response('200 OK', [
        ('Content-Type', 'text/plain'),
    ])
    return ['Hello']

哪个用户已经登录。

我该怎么做呢?

2 个回答

2

关于Apache/mod_wsgi以及访问、认证和授权机制的更多信息可以在这里找到:

http://code.google.com/p/modwsgi/wiki/AccessControlMechanisms

这些信息默认不会传递,因为如果传递了,可能会把密码信息泄露给一些不应该获取这些信息的应用程序。

16

添加 WSGIPassAuthorization On

<VirtualHost *>
    <Location />
        AuthType Digest
        AuthName "global"
        AuthDigestDomain /
        AuthUserFile /root/apache_users
        <Limit GET>
            Require valid-user
        </Limit>
    </Location>
    WSGIPassAuthorization On
    WSGIScriptAlias / /some/script.wsgi
    WSGIDaemonProcess mywsgi user=someuser group=somegroup processes=2 threads=25
    WSGIProcessGroup mywsgi
    ServerName some.example.org
</VirtualHost>

然后只需读取 environ['REMOTE_USER']

def application(environ, start_response):
    start_response('200 OK', [
        ('Content-Type', 'text/plain'),
    ])
    return ['Hello %s' % environ['REMOTE_USER']]

更多信息请查看 mod_wsgi文档

撰写回答