如果 Kerberos 身份验证(由于某种原因)失败,Apache 是否有办法回退到其他身份验证方法?身份验证方法的顺序应为:
- 凯尔伯罗斯
- 活动目录
- RSA 令牌
RSA 令牌身份验证由没有 AD 帐户的外部方使用。
如果您需要更多信息,请告诉我。谢谢。
我当前的配置如下:
<Directory "/path/to/directory">
AuthType Kerberos
AuthName "Please provide credentials to log in"
KrbAuthoritative off
AuthzLDAPAuthoritative off
AuthBasicAuthoritative off
AuthBasicProvider this-sso this-ad this-radius
Require valid-user
SSLRequireSSL
</Directory>
身份验证别名如下:
<AuthnProviderAlias kerberos this-sso>
KrbAuthRealms THIS.LOCAL
KrbMethodNegotiate on
KrbMethodK5Passwd off
KrbDelegateBasic on
Krb5Keytab /etc/apache2/this.keytab.key
KrbServiceName HTTP
KrbVerifyKDC off
</AuthnProviderAlias>
<AuthnProviderAlias ldap this-ad>
Include /etc/apache2/.ldapbinddn
AuthLDAPURL "ldaps://srv1.this.local srv2.this.local:636/OU=DIR,DC=this,DC=local?sAMAccountName?sub?(objectClass=user)"
</AuthnProviderAlias>
<AuthnProviderAlias xradius this-radius>
AuthXRadiusAddServer "rsasrv1.this.local:1812" "Shared_key_here"
AuthXRadiusTimeout 7
AuthXRadiusRetries 2
AuthXRadiusRejectBlank on
</AuthnProviderAlias>
答案1
mod_auth_kerb 模块的网站对此有些不清楚,一度指出AuthType
必须设置为 Kerberos,但也暗示“如果您的 AuthType 是 Basic”,它将基本上使用AuthType Basic
提供的用户名/密码对来检查您的 Kerberos 服务器。
具体来说,您对 Kerberos 的其他指令KrbDelegateBasic on
似乎没有记录在该模块的 sourceforge 页面上,这让我怀疑您正在使用该模块的哪个版本。
但是,暂时把这一点放在一边,除非 mod_auth_kerb 模块能够以某种方式将它获得的值传递给链中的下一个身份验证模块,以便下一个模块可以理解,否则这可能不会起作用。
作为测试,我将改为AuthType
、Basic
改为KrbMethodNegotiate
和off
改为KrbMethodK5Passwd
,on
看看这是否会改变行为。这有望使 mod_auth_kerb 以其他模块可以理解的方式收集登录数据,防止协商身份验证方法,并尝试收集用户名/密码而不是票证。
协商部分很重要,因为它针对每个连接进行,因此,如果客户端浏览器协商的方法搞砸了下一个身份验证方法,它将永远无法通过 Kerberos 身份验证。
我要说的是,我从未在 Apache 上配置过 Kerberos 身份验证,因此这只是猜测。不过,我已经将 LDAP 回退到基于文件的基本身份验证,因此我知道回退机制通常有效。