2008-12-23 97 views
12

讓我們假設我對Kerberos不太瞭解 - 只是基礎知識。PHP中的Kerberos身份驗證

我有...

  • Debian的Linux 2.6的Web服務器
    • Apache 2.2的
      • mod_auth_kerb所/ 5.3
      • PHP/5.2
  • 一(工作)Kerberos領域
  • Windows客戶端

怎麼辦我在PHP腳本中使用這些信息,這樣如果訪問者擁有這樣的kerberos票證,我不需要登錄該網站?我不希望Apache處理認證。我需要找出哪個用戶通過PHP訪問網站。

這可能嗎?如果是這樣:如何?

我發現到目前爲止:我必須"enable" the domain in Firefox

但是僅此而已......

回答

3

我不知道這是否會幫助,但它看起來像如果使用KrbSaveCredentials參數Apache將向PHP與modauthkerb包中的用戶名信息。你應該得到兩個全局變量在PHP中:

$_SERVER['REMOTE_USER'] 
$_SERVER['KRB5CCNAME'] 

http://archives.postgresql.org/pgsql-admin/2004-08/msg00144.php看起來他們已經得到了這個工作。

這樣,如果你可以看到用戶是什麼,它確實不是一個要求,實際上PHP的身份驗證。

1

mod_auth_kerb會爲您處理實際的身份驗證。之後,它將設置REMOTE_USER和KRB5CCNAME環境變量。請注意,有幾點注意事項:

  • 如果啓用了Krb5AuthToLocal選項,mod_auth_kerb可以在Kerberos主體和本地用戶名之間進行轉換。
  • 如果啓用了Krb5AuthToLocal,那麼當身份驗證成功時,mod_auth_kerb將調用Kerberos庫執行從已驗證名稱到本地名稱的轉換,因爲Kerberos主體並非總是與操作系統中的實際用戶相同(您可以將主體映射到用戶名)。
  • 當使用MIT Kerberos時,此映射是在/etc/krb5.conf中的auth_to_local規則的幫助下執行的,有關詳細信息,請參見krb5.conf手冊頁。
  • mod_auth_kerb有一個錯誤,導致本地名稱不應該有比主體本身更長的名稱。這通常適用於默認領域的委託人,因爲他們沒有領域部分,即'用戶'而不是'user @ REALM'。但是,如果您擁有多個可信領域,則來自非默認領域的用戶將顯示爲'[email protected]',然後mod_auth_kerb將會嚇倒。這個錯誤應該在Fedora 18+和RHEL6.5中修復,因爲mod_auth_kerb上游有點死了,所以對Debian不太確定。
  • 因此,您的REMOTE_USER變量將包含Kerberos主體或本地用戶名,具體取決於mod_auth_kerb的配置方式。如果您的應用程序依賴於REMOTE_USER值必須是現有系統用戶的事實,則需要確保已啓用Krb5AuthToLocal選項,並且此類用戶在系統中可見(通過winbind或sssd)。

對於你的情況我建議你看一下優秀的如何由湯姆麥克勞克林:http://blogs.freebsdish.org/tmclaugh/2010/07/15/mod_auth_kerb-ad-and-ldap-authorization/