我希望能够在 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