2007年4月30日 星期一

擴充套件-LdapAuthentication

前言

大家如果有用過 LDAP,應該大多是用來儲存使用者的帳號密碼作驗證之用,透過此方式,可以統一管理使用者的帳號密碼資訊,不用在每台機器上都需要建立使用者的帳號密碼,如此一來,管理者的工作當然也就可以變的更有效率。

而這邊要介紹的是 MediaWiki 的擴充套件,其功能就是讓 MediaWiki 的使用者帳號密碼也能透過 LDAP 的方式進行認證,如此一來,想要編輯 Wiki 的使用者就不需要再建立一次帳號密碼了!


環境介紹
  • OS:Fedora Core 6
  • LDAP server:OpenLDAP
  • MediaWiki 版本:1.9.3


設定說明

由於目前 LdapAuthentication 擴充套件在 1.9.x 的版本中使用似乎還有些狀況,因此必須針對程式做一些小修改,才能讓 LDAP 認證順利完成。

1、下載 LdapAuthentication.php:

原始碼可以按此處 取得,或是在 google 搜尋「mediawiki extension ldap authentication」應該可以很容易找到,將原始碼放置在 includes 目錄下(因為這支程式還會 inlcude 此目錄下的 AuthPlugin.php 這個檔案)。


2、加入 LDAP 認證設定:

在檔案 LocalSettings.php 加入以下設定:

3、修改 bug:

首先,LdapAuthentication.php 程式中,會預設以 TLS 的方式連線,大約是在程式碼 127~132 行,上面有註解清楚的說明,不過以目前的情況,我們並非以 SSL or TLS 的方式與 OpenLDAP server 進行連線,因此要把這一部份的程式進行修改,因此將以下此行:
$encryptionType = "tls";
修改為成以下內容:
$encryptionType = "";
當然也可以註解掉,另外加上去也是可以的! 如此一來就可以順利的與 OpenLDAP server 進行連線。


再來是登入成功後,Wiki 會自動的呼叫在 includes/SpecialUserlogin.php 中的 initUser 這一個 function(大約在 309 行左右的位置),裡面有以下此行,會嘗試去修改 OpenLDAP server 中使用者的密碼資訊:
$u->setPassword( $this->mPassword );
當然 OpenLDAP server 不會讓這支程式修改密碼資訊,因此認證會產生錯誤,而要將此錯誤修正,則將此行刪除,用以下的程式碼來取代:
if ( $wgAuth->allowPasswordChange() ) {
$u->setPassword( $this->mPassword );
}
如此一來,就可以順利的進行 LDAP 認證囉!


參考連結:
  1. Extension:LDAP Authentication
  2. Extension talk:LDAP Authentication
  3. View of /trunk/extensions/LdapAuthentication/LdapAuthentication.php
  4. Configuring WikiMedia for an Active Directory based intranet - Part 3


後記

最後發現,MediaWiki 版本為 1.9.x,使用 LdapAuthentication 還是會有問題,新的 user 會無法登入(原本登入過的 User 會在 database 中存有一份帳號資訊,新的 User 登入後資訊無法存入),目前似乎也無解決方案......有的話會寫上來!

沒有留言:

張貼留言