我已經搜索了這一天的日子,在mod_auth_kerb源代碼中探索並嘗試了很多,但都無濟於事,所以我真的希望有人能指出我在這一個正確的方向...Apache2 - 使用mod_auth_kerb啓用「不需要登錄,但允許它」
我已經工作多年的Apache :: AuthCookie(在Apache 1.x和Apache 2.x(主要是2.2.x))並且最近使用AuthCookie(僅針對authz)和mod_auth_pubtkt針對AD後端(通過LDAP)開發了單點登錄解決方案。這一切都很好,現在我正在考慮爲啓動Web瀏覽器之前登錄到AD域的Windows用戶添加Kerberos。 這是行得通的(keytab爲我的單一登錄服務器生成,現在可以驗證通過用戶的瀏覽器和Apache發送給它的Kerberos票據),但我需要將其設置爲可選。也就是說,我需要設置Apache 2.2.x,以便如果Kerberos標頭不在那裏檢查,則不會出現任何錯誤或挑戰(例如,IE會提示輸入憑據,我不希望這樣做)。
在我的SSO CGI代碼中,我基本上想知道是否已經填充了$ ENV {REMOTE_USER}(通過mod_auth_kerb),如果是,則相應採取行動,如果不是,則執行我現在要做的事情(請求用戶在表單中聲明,認證到LDAP服務器並繼續)。
我認爲這會工作:
<Location /whatever>
AuthName DualExp
AuthType Kerberos
KrbAuthRealms mumble
KrbServiceName HTTP/[email protected]
Krb5Keytab /etc/apache2/my.krb5tab
KrbMethodNegotiate on
KrbMethodK5Passwd off
KrbLocalUserMapping on
KrbAuthoritative off
require valid-user
AuthType Site::NullAuth
PerlAuthenHandler Site::NullAuth->always
</Location>
如果網站:: NullAuth是一個非常簡單的mod_perl認證介紹處理程序,它只是返回「OK」始終。
當mod_auth_kerb的「KrbAuthoritative」設置爲「off」時,它看起來像Site :: NullAuth一直在調用,而不僅僅是在失敗時(即沒有用於mod_auth_kerb的Kerberos頭),這是第一個意外。如果成功設置mod_auth_kerb的用戶對Site :: NullAuth沒有表面看法,那就沒問題了。由於NullAuth被最後調用,所以最終沒有用戶設置。或者至少我認爲這就是發生了什麼。在NullAuth,我這樣做是爲了檢查用戶:
sub always {
my ($auth_type, $r) = @_;
my $auth_user = $r->user;
my $prev_user = "";
$prev_user = $r->prev->user if $r->prev;
$r->server->log_error("user authenticated as $auth_user and prev is $prev_user");
return OK;
}
,並看到什麼爲$ R->用戶或$ R-> prev->用戶。
有沒有人有任何我可以在這裏嘗試?
感謝,
...史蒂夫