如何告诉mod_auth_kerb尽其所能,尽pipe没有“要求有效的用户”

我在Apache上使用mod_auth_kerb实现了SSO身份validation。 我的configuration如下所示:

<Location /login/ > AuthType Kerberos AuthName "Kerberos Login" KrbMethodNegotiate on KrbAuthoritative on KrbVerifyKDC on KrbAuthRealm D.ETHZ.CH Krb5Keytab /etc/HTTP.keytab KrbSaveCredentials on RequestHeader set KERBEROS_USER %{REMOTE_USER}s </Location> 

我的问题是,没有require valid-user ,mod_auth_kerb甚至不尝试authentication用户和KERBEROS_USER结果是(null) 。 如果我添加require valid-user ,那么如果浏览器支持,用户将被自动validation,但如果浏览器不支持Kerberos协商,则会显示一个难看的模态login表单(ala HTTP Basic Auth)。

我想实现的是,如果用户访问/login/ ,mod_auth_kerb尝试通过Kerberos协商来validation用户。 如果失败,则会向用户呈现正常的HTMLlogin表单。

有没有可能以这种方式configurationApache / mod_auth_kerb?

当我构build了一个简单的单点login工具(将Kerberos与mod_auth_tkt合并)时,我做了一次这样的工作。 它需要一点点的经验:

  • / webauth / login受到require valid-user指令的保护。 如果有人使用有效的Kerberos凭据连接,我们从REMOTE_USER获得用户名,给他们一个身份validationcookie,然后发送给他们。

  • Apacheconfiguration使用ErrorDocument请求将未经身份validation的用户redirect到/ webauth / require_authentication:

    ErrorDocument 401 / webauth / require_authentication

    这将执行以下操作:

    • 返回一个401结果代码(通常,ErrorDocuments吃你的结果代码),和
    • 出示login表单。
  • login表单将完全符合您的期望:提供一个用户名/密码表单,validation相同的,然后给他们身份validationcookie。