我需要为我的应用程序的一部分使用Apache基本身份validation。 我想从Apache获得authentication的用户名,但我似乎无法find在哪里访问它。 我可以在apache日志中看到用户名,所以我知道它在某处。 用户通过apachevalidation后,请求通过代理发送到cherrypy服务器。
这里是我的apache vhostconfiguration部分:
<Location /ical> AuthType Basic AuthBasicProvider ldap AuthName "Example Calendar Login" AuthLDAPUrl "ldaps://ldap.example.net/ou=People,dc=example,dc=net?uid" Require valid-user ProxyPass http://localhost:8082/ ProxyPassReverse http://localhost:8082/ SetEnv proxy-nokeepalive 1 </Location>
用户authentication和代理位工作得很好。 一旦请求被authentication并发送到cherrypy,这里是我在cherrypy中的头文件:
(Pdb) pp cherrypy.request.headers {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Accept-Encoding': 'gzip,deflate', 'Accept-Language': 'en-us,en;q=0.5', 'Authorization': 'Basic xxxxxxxxxxx', 'Connection': 'close', 'Host': 'sub.example.net', 'If-None-Match': 'e5b0879ce68fcce5b960ce4281c8d706', 'Remote-Addr': '10.132.32.86', 'User-Agent': 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.10) Gecko/20100915 Ubuntu/10.04 (lucid) Firefox/3.6.10', 'X-Forwarded-For': 'xx.xx.xx.xx, xx.xx.xx.xx', 'X-Forwarded-Host': 'sub.example.net, sub.example.net', 'X-Forwarded-Server': 'sub.example.net, sub'}
任何人都可以帮助我访问从Apache基本身份validation的用户名?
您的cherrypy应用程序正在接收基本身份validation信息,因为我们在标题中看到:
'Authorization': 'Basic xxxxxxxxxxxxxxxxxxxxxx==',
你只需要:
由于这不是stackoverflow ;) ,我不会打扰给上面的确切的python实现,但它应该让你开始。 基本访问身份validation的维基百科条目非常丰富,包含各种语言的代码片段。
(只是关于这个问题的一个安全提示:如果您使用真实的用户名/密码来生成问题中包含的标题,请注意,您已经在上面的“授权”标题的文本中向世界展示了它,想要简单地解码它!)
编辑:我已经'x'-ed授权string。
我已经添加了一个头来传递基于Apache的authentication用户。
RewriteEngine On RewriteCond %{REMOTE_USER} ^(.*)$ RewriteRule ^(.*)$ - [E=R_U:%1] RequestHeader set X-Remote-User %{R_U}e