我想只通过用户名授权用户,忽略任何密码。用户名是许可证 ID。如果你有它,你可以访问该网站,否则不能。
该系统现在可以在 Apache 2.2 上使用mod_auth_mysql通过设置AuthMySQLNoPasswd On
.
现在我正在尝试升级到 Apache 2.4 并使用mod_authz_dbd。我不想做任何dbd身份验证,所以我考虑使用mod_authn_anon对任何用户进行身份验证,然后使用dbd进行授权。这是配置:
AuthType basic
AuthName "Please use license ID as user name, password is irrelevant"
AuthBasicProvider anon
Anonymous_NoUserID on
# "authorized" is the name of an imaginary group that is returned by AuthzDBDQuery
# when username matches license ID in the database
Require dbd-group authorized
AuthzDBDQuery "select 'authorized' from user_info where user_name = %s"
这是日志的相关部分:
mod_authz_core.c(809): AH01626: authorization result of Require dbd-group authorized: denied (no authenticated user yet)
mod_authz_core.c(809): AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
auth_basic:error] AH01618: user id not found: /protected/
似乎anon实际上并没有对用户进行身份验证以使其可用于dbd授权。
我知道mod_wsgi,但我想要一个带有标准 apache2 模块的解决方案。我不想安装 Python。
AFAIK 此功能在当前标准模块中不可用。
因此,如果您不想安装 python,则很可能需要稍微更改代码。
如果您只想通过用户名对用户进行身份验证,您可以通过编辑 mod_authn_dbd.c 来实现。
该文件在 Apache Github 帐户上可用,这里是它的链接:mod_authn_dbd.c。
应该突出显示第 183-187 行:
你会想要评论/删除它们。允许您使用任何密码(包括将框留空)进行身份验证。
因此,一旦您保存并将这些更改应用于文件。您将需要编译它。
这是
apxs2
在 unix 上使用 : 命令完成的。它将编译它并在之后自动激活它。
如果您在运行此命令时遇到问题,您可能缺少 httpd-devel(centos) 或 apache2-dev(ubuntu)。
现在在您的配置文件中,删除:
添加 :
因此,您在上面发布的配置应如下所示:
然后,您将能够仅使用他们的许可证号对您的用户进行身份验证,并使用 authz 执行您需要执行的任何操作。
尽管如此,我真的希望有另一个更简单、更方便的解决方案。
请记住,通过这样做,如果您需要此模块正常运行,您将再次解决另一个或相同的问题。
祝你好运!
我假设您还需要这些方面的东西: