代码之家  ›  专栏  ›  技术社区  ›  skrebbel

使用mod python使HTTP身份验证成为可选的

  •  1
  • skrebbel  · 技术社区  · 16 年前

    我有一个Web应用程序,它根据传递的参数访问多个控制器类。对于某些控制器,我希望用户自己进行身份验证(通过简单的HTTP身份验证),对于某些控制器,我希望公共访问。

    有没有办法做到这一点?在我的.htaccess文件中,我现在

    AddHandler mod_python .py
    PythonHandler handler
    PythonAuthenHandler handler
    PythonDebug On
    
    AuthType Basic
    AuthName "My Realm"
    AuthBasicAuthoritative Off
    require valid-user
    

    Authenhandler的调用是正确的,但即使我只是这样做

    def authenhandler(req): 
        return apache.OK
    

    要求用户输入密码(尽管可以接受输入的任何密码)

    我尝试完全从.htaccess中删除auth*内容(和require指令),然后在普通处理程序中为那些我 需要身份验证(未找到):

    request.err_headers_out.add('WWW-Authenticate', 'Basic realm="My Realm")
    return apache.HTTP_UNAUTHORIZED
    

    这就是我理解服务器在没有收到正确的身份验证时应该做什么的原因。然而,这也不起作用。

    我来自一个PHP背景,我知道后者是如何在PHP中完成的,但是有时候PHP会做一些额外的小魔术来让这些东西真正工作。这是其中之一吗?

    根据传递的URL,是否有任何方法可以选择从同一个处理程序请求身份验证?

    1 回复  |  直到 14 年前
        1
  •  1
  •   synthesizerpatel    14 年前

    有两种方法可以用Apache指定身份验证范围,大多数人使用的是基于gt;directorylt;的方法,即目录中或目录下的任何内容都可以通过htpasswd进行身份验证。

    还有gt;locationlt;,它将指令应用于文件系统之外的内容,如mod_python注册代码。

    这是如何在“虚拟”路径上设置身份验证的方法,例如 状态 ,如果您启用了mod_状态。

    你可以用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%地免费提供'

    我的第一个答案整理出最后一个问题。