我有一个web应用程序,它根据传递的参数访问多个控制器类。对于某些控制器,我希望用户(通过简单的HTTP身份验证)对自己进行身份验证,而对于一些控制器,我希望进行公共访问。
有什么办法让这事发生吗?在我的.htaccess文件中,我现在
AddHandler mod_python .py
PythonHandler handler
PythonAuthenHandler handler
PythonDebug On
AuthType Basic
AuthName "My Realm"
AuthBasicAuthoritative Off
require valid-user作者的调用是正确的,但是即使我这样做了
def authenhandler(req):
return apache.OK用户被要求提供密码(尽管输入的任何密码都被接受)
我尝试从.htaccess中完全删除Auth* handler (和require指令),并在普通处理程序中对我需要身份验证的情况执行以下操作(没有找到它):
request.err_headers_out.add('WWW-Authenticate', 'Basic realm="My Realm")
return apache.HTTP_UNAUTHORIZED这就是我所理解的服务器在没有接收到正确的身份验证时应该做什么。然而,这也不起作用。
我来自PHP背景,我知道后者是如何在PHP中实现的--但是PHP有时会做一些额外的无文档化的魔术来使这些东西真正发挥作用。这是其中一个案子吗?
根据传递的URL,是否有任何方法可选地从同一个处理程序请求身份验证?
发布于 2011-05-27 09:46:44
有几种方法可以使用Apache指定身份验证范围,大多数人习惯于基于gt;Directorylt;,即目录中或目录下的任何内容都会根据htpasswd进行身份验证。
还有gt;Locationlt;,它将指令应用于文件系统之外的内容,如mod_python注册代码。
如果启用了“虚拟”路径(如/status ),则可以通过此方式设置身份验证。
您可以对mod_python路径执行相同的操作。
<Location /python/app1/>
Order allow,deny
Allow from all
</Location>
<Location /python/app2/>
Order allow,deny
Allow from all
AuthType basic
AuthName "Protected Intranet Area"
AuthUserFile /etc/apache2/htpasswd
Require valid-user
</Location>我应该补充一句--你的意思不一定是‘一些用户应该使用用户名和密码进行身份验证,而其他用户只需要输入用户名’
或
“有些应用程序需要100%的时间进行身份验证,而其他应用程序则应该100%的时间免费使用”
我的第一个回答列出了最后一个问题。
https://stackoverflow.com/questions/1471602
复制相似问题