LDAP対応につきまして
コメント(7)
新しいものから |
古いものから |
ネスト表示 |

Re: LDAP対応につきまして
投稿者: onokazu | 投稿日時: 2009/1/7 1:45
LDAP対応に関してですが、2.1.6のコア自体が対応しているとは言えないと思います。
また、LDAPに関してはどのような利用を想定されているのでしょうか?
ユーザ認証のみをLDAPに行わせて、それ以外のユーザ情報の管理はXCL
側で行うのか、それとも全てのユーザ情報の管理をLDAP側で行いたいのでしょうか?
前者は外部認証モジュール等がありますので、そのモジュールの作者にかけあえば
作ってもらえるかもしれません。また、当サイトでも外部認証をプラグイン形式で
自由に追加できるようなシステムを構築していますが、認証部分のみをLDAPで行い、
その認証情報を既存のXCLアカウントまたは新規アカウントへと紐付けるように
させるようなことはプラグイン経由で簡単に実装できます。
後者に関しては今のところXCLでは難しいと思います。できないことはないですが、
XCLのインストール部分から色々とハックが必要になると思います。
また、LDAPに関してはどのような利用を想定されているのでしょうか?
ユーザ認証のみをLDAPに行わせて、それ以外のユーザ情報の管理はXCL
側で行うのか、それとも全てのユーザ情報の管理をLDAP側で行いたいのでしょうか?
前者は外部認証モジュール等がありますので、そのモジュールの作者にかけあえば
作ってもらえるかもしれません。また、当サイトでも外部認証をプラグイン形式で
自由に追加できるようなシステムを構築していますが、認証部分のみをLDAPで行い、
その認証情報を既存のXCLアカウントまたは新規アカウントへと紐付けるように
させるようなことはプラグイン経由で簡単に実装できます。
後者に関しては今のところXCLでは難しいと思います。できないことはないですが、
XCLのインストール部分から色々とハックが必要になると思います。
Re: LDAP対応につきまして
ご回答ありがとうございます。
>また、LDAPに関してはどのような利用を想定されているのでしょうか?
ご呈示頂いた、2点ですと 完全にLDAPのみで認証を行いたかったです。。
ということは現状では1からになり厳しいということですか。
うーん、困りました。
>また、LDAPに関してはどのような利用を想定されているのでしょうか?
ご呈示頂いた、2点ですと 完全にLDAPのみで認証を行いたかったです。。
ということは現状では1からになり厳しいということですか。
うーん、困りました。
LDAP対応に関してですが、2.1.6のコア自体が対応しているとは言えないと思います。
また、LDAPに関してはどのような利用を想定されているのでしょうか?
ユーザ認証のみをLDAPに行わせて、それ以外のユーザ情報の管理はXCL
側で行うのか、それとも全てのユーザ情報の管理をLDAP側で行いたいのでしょうか?
前者は外部認証モジュール等がありますので、そのモジュールの作者にかけあえば
作ってもらえるかもしれません。また、当サイトでも外部認証をプラグイン形式で
自由に追加できるようなシステムを構築していますが、認証部分のみをLDAPで行い、
その認証情報を既存のXCLアカウントまたは新規アカウントへと紐付けるように
させるようなことはプラグイン経由で簡単に実装できます。
後者に関しては今のところXCLでは難しいと思います。できないことはないですが、
XCLのインストール部分から色々とハックが必要になると思います。
Re: LDAP対応につきまして
投稿者: hagane | 投稿日時: 2009/1/8 15:31
LDAP認証については、認証に関わる次のファイル内の処理を少し修正すれば対応します。
modules/legacy/kernel/handler.php
***************
*** 373,377 ****
--- 373,476 ----
return $flag;
}
+
+ /**
+ * Return array of object with $criteria.
+ *
+ * @access public
+ * @param CriteriaElement $criteria
+ * @param bool $id_as_key
+ *
+ * @return array
+ */
+ function &LDAPAuth($criteria = null, $id_as_key = false)
+ {
+ $authenticated = false;
+
+ if ($criteria != null && is_a($criteria, 'CriteriaElement')) {
+
+ $uname = $criteria->getChildElement(0)->getValue();
+ $pass = $criteria->getChildElement(1)->getValue();
+
+ $uid_attr = "uid=".$uname;
+ $uid_number = "uidnumber";
+ $mail_attr = "mail";
+ $name_attr = "cn";
+ $pass_attr = "userpassword";
+ $objectclass_attr = "objectclass=Staff";
+ $ldap_server = "LDAP サーバのアドレス";
+ $ldap_port = 389;
+ $base_dn = "ou=Users,dc=hkg,dc=ac,dc=jp";
+ $timezone_offset = 9;
+
+
+ $ds = ldap_connect($ldap_server, $ldap_port)
+ or die("Could not connect to LDAP server.");
+
+ if ($ds) {
+ //Authentication
+
+ $ldapbind = ldap_bind($ds,$uid_attr.",".$base_dn,$pass);
+ if ($ldapbind) {
+ // Get info from LDAP (mail,name)
+ //$filter = "(&(".$uid_attr.")(".$objectclass_attr."))";
+ $filter = $uid_attr;
+ $sr = ldap_search($ds,$base_dn,$filter,Array($name_attr,$pass_at
tr,$uid_number));
+ $info = ldap_get_entries($ds, $sr);
+ if ($info["count"] == 1) {
+
+ $authenticated = true;
+
+ // Search user in the DB
+ $criteria =& new Criteria('uname',$uname);
+ $user =& $this->getObjects($criteria, false);
+
+ if (count($user) <= 0) {
+
+ $memberHandler =& xoops_gethandler('member');
+
+ $NewUser =& $memberHandler->createUser();
+ $NewUser->setVar("uname",$uname);
+ $NewUser->setVar("user_avatar","blank.gif");
+ $NewUser->setVar('user_regdate', time());
+ $NewUser->setVar('timezone_offset', $timezone_offset);
+ $NewUser->setVar('actkey',substr(md5(uniqid(mt_rand(), 1)),
0, 8));
+ $NewUser->setVar("uid",$info[0][$uid_number][0]);
+ $NewUser->setVar("name",$info[0][$name_attr][0]);
+ $NewUser->setVar("pass",md5($pass));
+
+ $NewUser->setVar("level",1);
+ $NewUser->setVar('notify_method', 2);
+ /* 作成したい情報にあわせて適当に編集
+ if (strlen($info[0][$mail_attr][0])<=0) {
+ $NewUser->setVar("email",$info[0][$name_attr][0]."@");
+ }
+ else {
+ $NewUser->setVar("email",$info[0][$mail_attr][0]);
+ }
+ */
+ $NewUser->setVar("email",$uname.'@');
+
+ // Store info in DB (insert or update)
+ $memberHandler->insertUser($NewUser);
+
+ //Add the user to Registered Users group
+ $memberHandler->addUserToGroup(XOOPS_GROUP_USERS, $NewUser->
get('uid'));
+ }
+ else {
+ $NewUser =& $user[0];
+ }
+ }
+ }
+ ldap_close($ds);
+ }
+ else {
+ echo "cannot connect to ldap server";
+ }
+ }
+ return $authenticated;
+ }
}
?>
modules/user/class/users.php
*** 122,127 ****
--- 122,133 ----
return $objects;
}
+ function &LDAPAuth($criteria = null, $limit = null, $start = null, $id_a
s_key = false)
+ {
+ $objects =& parent::LDAPAuth($criteria, $limit, $start, $id_as_k
ey);
+ return $objects;
+ }
+
/**
* Return the array which consists of an integer as the uid. This member
* function is more speedy than getObjects().
modules/user/kernel/LegacypageFunctions.class.php
$root->mLanguageManager->loadModuleMessageCatalog('user');
$userHandler =& xoops_getmodulehandler('users', 'user');
$criteria =& new CriteriaCompo();
! $criteria->add(new Criteria('uname', xoops_getrequest('uname')))
;
! $criteria->add(new Criteria('pass', md5(xoops_getrequest('pass')
)));
$userArr =& $userHandler->getObjects($criteria);
--- 228,246 ----
$root->mLanguageManager->loadModuleMessageCatalog('user');
$userHandler =& xoops_getmodulehandler('users', 'user');
+
+ $uname = xoops_getrequest('uname');
+ $pass = xoops_getrequest('pass');
+
+ $ldap_criteria =& new CriteriaCompo();
+ $ldap_criteria->add(new Criteria('uname', $uname));
+ $ldap_criteria->add(new Criteria('pass', ($pass)));
+
+ $userArr =& $userHandler->LDAPAuth($ldap_criteria);
$criteria =& new CriteriaCompo();
! $criteria->add(new Criteria('uname', $uname));
! $criteria->add(new Criteria('pass', md5($pass)));
$userArr =& $userHandler->getObjects($criteria);
Re: LDAP対応につきまして
Re: LDAP対応につきまして
Re: LDAP対応につきまして
投稿者: kisara_icy | 投稿日時: 2009/1/9 8:29 | 親コメント: #19426
前者は外部認証モジュール等がありますので、そのモジュールの作者にかけあえば
作ってもらえるかもしれません。また、当サイトでも外部認証をプラグイン形式で
自由に追加できるようなシステムを構築していますが、認証部分のみをLDAPで行い、
その認証情報を既存のXCLアカウントまたは新規アカウントへと紐付けるように
させるようなことはプラグイン経由で簡単に実装できます。
ども、外部認証モジュール作者です(^^
LDAPは要望があるので対応させたいのですが、LDAP自体の環境がうまく構築できてないのでちょっと手が付けられてません。申し訳ない。
あと、昔LDAPをモジュールで作られた方がいたと思います。
使ったことはありませんが、こちらを参考にしてみてはどうでしょう。
http://xoopscube.jp/forum/3550?comment_id=12132
Re: LDAP対応につきまして