我读过这个问题的答案:
https://stackoverflow.com/questions/4102763/apache-basic-authentication- except-for-those-allowed
它帮助我了解如何不对某些用户进行身份验证(根据 IP):
<Directory /var/www/files/>
Require valid-user
Allow from 192.168.1.2
Satisfy Any
AuthUserFile /etc/apache2/basic.pwd
AuthName "Please enter username and password"
AuthType Basic
</Directory>
想象一下我有这个数据库(与用于身份验证的数据库不同):
User IP
Mark 192.168.1.2
Mike 192.168.1.3
Karl 192.168.1.4
1- 我可以使用 Apache 中的配置允许存储在数据库中的所有 IP 地址吗?我不需要静态解决方案(数据库正在动态变化)?
2-另一个问题是允许的IP的授权丢失,如果允许用户在没有身份验证的情况下获取页面,Apache可以使用这个数据库进行授权吗?详细信息:我们知道当Apache对用户进行身份验证时,它知道用户名身份验证凭据,但如果允许,用户名将会丢失,我希望 Apache 从它提取 IP 地址的同一个表中提取其允许的 IP 的用户名?
更新:
注:我认为托尼答案可能会有所帮助,但我也想要其他答案(这并不要求我构建模块)。
我这个问题的目标是“单点登录”:
我用自由半径对内部(网络内部)用户进行身份验证,因此我不希望 Apache 重新对他们进行身份验证。
我希望 Apache 使用 LDAP 对外部用户进行身份验证。
- 我的解决方案是使用
Allow
指令让内部用户无需身份验证,但我需要允许他们使用数据库(第一个问题)?并尝试配置 Apache 来授权内部用户(我没有进行身份验证)(第二个问题)?
注意:授权外部用户非常容易使用LDAP(因为 Apache 通过身份验证凭据知道它正在处理的用户的名称)。
我建议的解决方案是否适合做我想做的事情,如果不适合,您建议什么解决方案?
答案1
你有没有尝试过mod-auth 外部,它允许您为 Apache 进行自定义身份验证机制。
它使您可以访问环境变量,例如 IP、USER、PASS 等。您可以用您熟悉的语言编写脚本,然后从数据库中获取身份验证数据。
维基百科有一些例子。
如果您构建自定义身份验证脚本,请确保其编码良好(安全方面)。
该模块可在 CentOS (mod_authnz_external) 和 Ubuntu (libapache2-mod-authnz-external) 上使用
这是一个基本的 Apache 配置示例:
LoadModule authnz_external_module modules.d/mod_authnz_external.so
DefineExternalAuth my_auth environment /tmp/auth.sh
<Location />
AuthType Basic
AuthName "My super special access"
AuthBasicProvider external
Require valid-user
AuthExternal my_auth
</Location>
这是一个非常简单的脚本,用于记录 IP、用户名和密码,并且仅当提供的用户是“Tony”时才接受身份验证。
在此特定示例中,脚本保存在 /tmp/auth.sh 下,并设置了可执行位。您可以做任何您想做的事情(按 IP、用户名等过滤)。
#!/bin/bash
echo $(date) ${IP} >> /tmp/log.txt
echo $(date) ${USER} >> /tmp/log.txt
echo $(date) ${PASS} >> /tmp/log.txt
#Very basic filtering.
if [[ "${USER}" != "Tony" ]]
then
exit 1;
fi