Apache Config - 从身份验证中排除位置

Posted

技术标签:

【中文标题】Apache Config - 从身份验证中排除位置【英文标题】:Apache Config - Exclude Location from Authentication 【发布时间】:2012-10-20 05:35:28 【问题描述】:

我有一个受 Shibboleth 身份验证模块保护的 Web 应用程序。我目前的配置如下

<Location /MyApp>
 AuthType shibboleth
 ShibUseHeaders On
 ShibRequestSetting requireSession 1
 require shibboleth
</Location>

shibboleth 是一个提供 SSO 功能的身份验证模块,当前流程将用户引导至 Identity Provider 以供用户输入登录凭据。我希望能够打开一个特定的 URL,以便 URL 被身份验证模块绕过。我尝试了以下方法,但它似乎不起作用,并且在加载 URL 时出现空白页

方法一

<Location /MyApp/Login.html>
  Satisfy Any
  Allow from all
  AuthType None
  Require all granted
</Location>

方法二

<Location /MyApp/Login.html>
  AuthType shibboleth
  ShibRequestSetting requireSession 0
  require shibboleth
</Location>

我做了一些额外的调试,似乎问题在于 Login.html 加载的其他文件 - 例如 css、js 等。在 Apache 中配置它的正确方法是什么Login.html 可以绕过身份验证

谢谢

【问题讨论】:

【参考方案1】:

我最后关于排除 Login.html 加载的其他文件的评论最终是正确的。我使用以下格式排除了 html 文件正在加载的文件

<Location ~ "/MyApp/(Login.html|SessionTimeout.html|accessDenied.html|/badRequest.html|status|css/*|login/*|images/*|style/*|js/*|javascript/*|)">   
  Satisfy Any   
  Allow from all   
  AuthType None   
  Require all granted   
</Location>

【讨论】:

【参考方案2】:

当使用 Apache 2.4 而不是 2.2 时,为了排除“/server-status”,以下内容就足够了:

<LocationMatch "^(?!/server-status)">
    AuthType Basic
    AuthUserFile /etc/apache2/.htpasswd
    <RequireAll>
        Require ssl
        Require user valid_user_name
    </RequireAll>
</LocationMatch>

分析:

&lt;LocationMatch "regex"&gt; 是 equivalent 到 &lt;Location ~ "regex"&gt;。 正则表达式 used 是 pcre(与 perl 兼容的正则表达式)。 ^(?!/server-status) 表示: ^: "开头" (?!): "negative look ahead (而不是正面的(?=))"

【讨论】:

以上是关于Apache Config - 从身份验证中排除位置的主要内容,如果未能解决你的问题,请参考以下文章

如何在基于 Spring 的反应式应用程序中从身份验证中排除路径?

从 web.config 文件为 http 请求配置身份验证

HTTP 基本身份验证排除单个文件

从托管在 GitHub 上的 Spring Cloud Config Server 访问的 repo 的身份验证问题

通过代码从 Apache Beam 应用程序向 Google Cloud 进行身份验证

Apache Sling 中的摘要身份验证是不是可行?