Apache-2.2

儘管沒有“需要有效使用者”,如何告訴 mod_auth_kerb 完成其工作

  • November 22, 2010

我在 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 Negotiate,則會顯示一個醜陋的模式登錄表單(ala HTTP Basic Auth)。

我想要實現的是,如果使用者訪問/login/,mod_auth_kerb 會嘗試通過 Kerberos Negotiate 對使用者進行身份驗證。如果失敗,將向使用者顯示一個普通的 HTML 登錄表單。

是否可以以這種方式配置 Apache/mod_auth_kerb?

當我建構一個簡單的單點登錄工具(將 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。

引用自:https://serverfault.com/questions/204826