尽管没有“需要有效用户”,如何告诉 mod_auth_kerb 完成它的工作

Ben*_*end 11 kerberos mod-auth-kerb apache-2.2

我在 Apache 上使用mod_auth_kerb实现了 SSO 身份验证。我的配置是这样的:

<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>
Run Code Online (Sandbox Code Playgroud)

我的问题是,没有require valid-user, mod_auth_kerb 甚至不会尝试对用户进行身份验证并KERBEROS_USER最终成为(null). 如果我添加require valid-user,如果浏览器支持,用户会自动进行身份验证,但如果浏览器不支持 Kerberos Negotiate,则会显示一个丑陋的模式登录表单(ala HTTP Basic Auth)。

我想要实现的是,如果用户访问/login/,mod_auth_kerb 会尝试通过 Kerberos Negotiate 对用户进行身份验证。如果失败,将向用户显示一个普通的 HTML 登录表单。

是否可以以这种方式配置 Apache/mod_auth_kerb?

lar*_*sks 12

当我构建一个简单的单点登录工具(将 Kerberos 与 mod_auth_tkt 合并)时,我已经做过一次。它需要一点技巧:

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

  • Apache 配置使用ErrorDocument请求将未经身份验证的用户重定向到 /webauth/require_authentication:

    错误文档 401 /webauth/require_authentication

    这将执行以下操作:

    • 返回一个 401 结果代码(通常,ErrorDocuments 会吃掉你的结果代码),并且
    • 出示登录表格。
  • 登录表单完全符合您的预期:提供用户名/密码表单,验证相同,然后给他们 auth cookie。