在同一 URL 上切换多种身份验证类型

在同一 URL 上切换多种身份验证类型

我有一个使用 Shibboleth 身份验证和 SAML 身份提供商的安全 SSO 网站。我需要允许 Google Search Appliance 抓取工具来索引 URL。我需要将 HTTP 请求从 SAML 更改为仅针对 GSA 用户代理的基本身份验证,而无需重写 URL。我该如何配置 Apache 或 Shibboleth 来处理这个问题?

在另一个线程中,我看到了为不同的 Auth 类型配置不同子目录的建议。 如何在 Apache 中接受多种身份验证选项? 不幸的是,这种方法确实满足了我的要求,因为它改变了 URL —— GSA 会索引添加到 URL 前面的额外标记,并将其输出到搜索结果中,而不是规范的 URL。

我的 shibboleth2.xml 已针对 SAML 2.0 配置。以下是 Apache 中 vhost 的片段。有没有办法在 Apache 2.2 或 2.4 中的虚拟主机中添加身份验证类型的条件逻辑?或者有没有办法使用 Shib 配置来解决这个问题?

<VirtualHost *:443>
DocumentRoot    "/var/dispatcher/cache/www"
# Wish I could make use of this variable to toggle AuthTypes
SetEnvIfNoCase User-Agent ^gsa-crawler is_gsa_crawler

<Location />
    # for end users
    AuthType shibboleth
    ShibRequestSetting requireSession 1
    ShibUseHeaders On
    Require valid-user
</Location>

<Location />
    # for gsa
    AuthType Basic
    AuthName "Secure"
    AuthBasicProvider file
    AuthUserFile path_to/basic_pw_file
    Require valid-user
</Location>

<Directory "/var/dispatcher/cache/www">
    Order allow,deny
    Allow from all
</Directory>
</VirtualHost>

答案1

我不确定您是否可以这样做mod_access——据我所知,它不支持选择性地选择身份验证机制,它只允许使用一系列机制,直到所有机制都失败或其中一个成功。问题是,如果不将用户重定向到站点外,您就无法“尝试 SAML”。

如果您使用编程语言通过被动身份验证执行此操作,我认为这将很简单(if 语句和重定向)。但使用“require valid-user”和其他mod_access东西并不能让您达到我认为您想要的目的。

我的答案主要适用于 Apache <2.4.x,因为我不能 100% 地确信 2.4 缺少你的功能集(他们改变了很多)。

答案2

我刚刚问了类似的问题并找到了可能与此条目相关的解决方案:

将不同类型的 Apache 身份验证提供程序与仅当客户端主动提供时才进行基本身份验证相结合

您基本上使用<If></If><Else></Else>围绕两组授权指令的检查。

相关内容