Apache-2.2
儘管沒有“需要有效使用者”,如何告訴 mod_auth_kerb 完成其工作
我在 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。