![如何在 Apache 中接受多种身份验证选项?](https://linux22.com/image/494606/%E5%A6%82%E4%BD%95%E5%9C%A8%20Apache%20%E4%B8%AD%E6%8E%A5%E5%8F%97%E5%A4%9A%E7%A7%8D%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E9%80%89%E9%A1%B9%EF%BC%9F.png)
我想保护我的 VirtualHost 中的路径,但允许用户使用多种身份验证选项(例如mod-auth-cas
,mod-auth-openid
和mod-auth-digest
。)如何设置虚拟主机定义以允许auth-type
同一位置有多个?
答案1
多种身份验证类型的问题在于它们往往具有不可调和的协议。您可以尝试Shibboleth 文档,将所有内容放在一个子目录中,为您想要支持的每种身份验证类型创建到该目录的符号链接,然后为不同的身份验证类型配置每个符号链接位置。
<Location /basic>
AuthType Basic
AuthUserFile /path/to/.htpasswd
require valid-user
</Location>
<Location /cas>
AuthType CAS
require valid-user
</Location>
<Location /openid>
AuthOpenIDEnabled On
require valid-user
</Location>
答案2
我遇到了几乎相同的情况,解决如下:
在服务器配置级别,在 apache2.conf 中(假设基于 Debian 的发行版)
<AuthnProviderAlias method1 auth1_name >
# config options
# ...
</AuthnProviderAlias>
<AuthnProviderAlias method2 auth2_name >
# config options
# ...
</AuthnProviderAlias>
在虚拟主机特定的配置文件中:
<VirtualHost *>
# config options
# ...
<Location /your_location>
# config options
AuthBasicProvider auth1_name auth2_name
# other needed config options
# ...
</Location>
</VirtualHost>
通过这种方式,您可以在同一个 Location 指令中为不同的 VirtualHosts 使用具有不同名称的不同授权/身份验证方法
有关我的解决方案的更多详细信息,请参阅我的一篇简短博客文章:链接文本
HTH,再见 :) Gianluca
答案3
你有没有尝试过 ”满足任何“?
答案4
另一种解决方案是根据 HTTP 标头的内容使用以下子句来区分身份验证:
<If "%{HTTP:Authorization} =~ /^Basic/">
AuthType Basic
AuthUserFile /path/to/.htpasswd
Require valid-user
</If>
<Elseif "%{HTTP:Authorization} =~ /^Bearer/">
AuthOpenIDEnabled On
Require valid-user
</Elseif>
<Else>
AuthType CAS
Require valid-user
</Else>