gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:14 26 4
gpt4 key购买 nike

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

有办法实现这一点吗?在我的 .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 从同一处理程序选择性地请求身份验证?

最佳答案

有几种方法可以指定 Apache 的身份验证范围,大多数人习惯的一种方法是 gt;Directorylt;基于 - 即目录中或目录下的任何内容都会根据 htpasswd 进行身份验证。

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

如果您启用了 mod_status,这就是您在“虚拟”路径(如 /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% 的时间免费可用”

我的第一个答案解决了最后一个查询。

关于python - 使用 mod-python 使 HTTP 身份验证成为可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1471602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com