如何在没有“需要有效用户”的情况下告诉mod_auth_kerb进行工作


11

我在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>

我的问题是,如果没有require valid-user,mod_auth_kerb甚至不会尝试对用户进行身份验证并KERBEROS_USER最终成为(null)。如果我添加require valid-user,则在浏览器支持的情况下会自动对用户进行身份验证,但如果浏览器不支持Kerberos协商,则会显示出丑陋的模式登录表单(即HTTP基本身份验证)。

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

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


除非提供登录表单和适当的错误处理,否则这是正确的(预期的)行为。
BillThor

Answers:


12

构建一个简单的单点登录工具(将Kerberos与mod_auth_tkt合并)时,我已经完成了一次。它需要一点点装饰:

  • / webauth / login受require valid-user指令保护。如果有人使用有效的Kerberos凭据进行连接,则我们将从REMOTE_USER获得其用户名,并给他们提供身份验证cookie,然后按他们的方式发送它们。

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

    ErrorDocument 401 / webauth / require_authentication

    这将执行以下操作:

    • 返回401结果代码(通常,ErrorDocuments吃掉您的结果代码),然后
    • 出示登录表格。
  • 登录表单将完全符合您的期望:提供用户名/密码表单,进行验证,然后为他们提供身份验证cookie。


+1是一个有趣的解决方案。
山姆·哈里克

太好了,这很完美!
本杰明·沃尔文德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.