如果 mod_auth_kerb 失败则回退身份验证

如果 mod_auth_kerb 失败则回退身份验证

如果 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 模块能够以某种方式将它获得的值传递给链中的下一个身份验证模块,以便下一个模块可以理解,否则这可能不会起作用。

作为测试,我将改为AuthTypeBasic改为KrbMethodNegotiateoff改为KrbMethodK5Passwdon看看这是否会改变行为。这有望使 mod_auth_kerb 以其他模块可以理解的方式收集登录数据,防止协商身份验证方法,并尝试收集用户名/密码而不是票证。

协商部分很重要,因为它针对每个连接进行,因此,如果客户端浏览器协商的方法搞砸了下一个身份验证方法,它将永远无法通过 Kerberos 身份验证。

我要说的是,我从未在 Apache 上配置过 Kerberos 身份验证,因此这只是猜测。不过,我已经将 LDAP 回退到基于文件的基本身份验证,因此我知道回退机制通常有效。

相关内容