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

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

我希望能够在 apache 服务器(ub16 上的 2.4.18+)上拥有一条路径,该路径主要使用 SAML(使用 mod_auth_mellon 插件)进行身份验证以供交互式使用,但也支持让调用者预先发送基本身份验证凭据。(想想 REST api 端点通常会触发交互式表单登录,但如果您预先发送基本身份验证凭据,将允许绕过。)

本质上我正在寻找这种行为:

  • 如果随请求一起发送了凭据:
    • 尝试一下,如果有效,就允许请求
  • 如果上述信用失败,或没有提供任何信用
    • 触发首选的身份验证插件。

这可能吗?我宁愿不要将其推回到应用程序本身。

我不希望发生的是 apache 服务器发回触发基本身份验证对话框的响应。

答案1

回答我自己的问题....对此进行了进一步的研究,并得出了以下似乎有效的结论:

<Location />
<If "-n req('Authorization')">
    AuthName "Active Directory"
    AuthBasicProvider ldap
    AuthType basic
    AuthLDAPMaxSubGroupDepth 0
    AuthLDAPBindAuthoritative off
    AuthLDAPRemoteUserAttribute sAMAccountName
    AuthLDAPInitialBindPattern (.+) $1@yyyyy
    AuthLDAPInitialBindAsUser on
    AuthLDAPSearchAsUser on
    AuthLDAPCompareAsUser on
    AuthLDAPUrl "ldaps://xxx,dc=com?sAMAccountName,memberOf?sub"
    LDAPReferrals Off

    require valid-user
</If>
<Else>
    Require valid-user
    AuthType "Mellon"
    MellonEnable "auth"
    MellonVariable "cookie"
    MellonEndpointPath "/sso"
    MellonDefaultLoginPath "/"
    MellonSubjectConfirmationDataAddressCheck Off
    MellonSessionLength 86400
    MellonSPPrivateKeyFile /...../sp-private-key.pem
    MellonIdPMetadataFile /...../idp-metadata.xml
    MellonDoNotVerifyLogoutSignature https://........
</Else>
</Location>

有谁认为这种方法有什么问题吗?

答案2

参考@nathan-neulinger的答案-使用apache<If><Location>如果对一般的 有例外,里面的指令可能会成为问题<Location>

例子

<Location />
<If ...>
...
</If>
<Else>
...
</Else>

<Location /open-path/>
AuthType None
Require all granted
</Location>

当我向用户介绍<If>“catch all”块时,没有“catch all”块Require all granted(对所有人开放)就被尊重了,然后就被发送给了 Mellon。<If>/open-path

以下是一些背景信息:https://stackoverflow.com/questions/51222522/apache-2-4-precedence-of-if-rules

https://httpd.apache.org/docs/2.4/sections.html#merging

相关内容