私のプロジェクトは、大学のモジュール登録システムを作成することです。そこで、学生をシステムに認証するための詳細について、大学のIT担当者に問い合わせました。既存の大学ログインを使用してシステムを開発しています。彼らは私にいくつかのLDAP情報を与えました、私はその使用法を知りません。 ApachaサーバーでPHP、Mysqlを使用しています。 LDAP情報を含むユーザーIDとパスワードを指定して、システムにログインしているユーザーを認証するにはどうすればよいですか。
以下にLDAP情報を示します(ドメイン名などを変更しました)
Blueroom.ac.ukドメインのLDAP情報
LDAP Host : ad.blueroom.ac.uk
LDAP port no: 389
BASE DN : ou=bluebird, dc=bluebird, dc=ac, dc=my
LDAP account to bind : cn = kikdap, ou=servacc, dc=bluebird,dc=ac,dc=uk
LDAP account password : ********
Attribute : sAMAccountName
一般的な手順は次のとおりです(括弧内の関連するext/ldap phpコマンド):
「LDAPホスト」と「LDAPポート番号」を使用してLDAPサーバーに接続し( ldap_connect() )、正しい接続オプションを設定します( ldap_set_option() )、特にLDAP_OPT_PROTOCOL_VERSION
およびLDAP_OPT_REFERRALS
「バインドするLDAPアカウント」と「LDAPアカウントのパスワード」を使用してLDAPサーバーにバインドします( ldap_bind() )-Active Directoryサーバーに対して認証する場合は、ユーザー名とパスワードを直接使用できますログインページを開き、次のすべての手順をスキップします。
「ベースDN」と適切なLDAPフィルターを指定して、一致するユーザーエントリ/オブジェクトをツリーで検索します-(&(objectClass=user)(sAMAccountName=%s))
のようなもので、%s
は認証対象のユーザー名に置き換える必要があります(--- ldap_search() )
返されたエントリの数が1であるかどうかを確認します(<> 1の場合、何かが間違っている、たとえばユーザーが見つからない、または複数のユーザーが見つかった)
この単一エントリの識別名(DN)を取得します( ldap_get_dn() )
最後の手順で見つかったDNを使用して、認証ページで指定されたパスワードでLDAPサーバーにバインドしようとします( ldap_bind() )
バインドが成功した場合、すべてがOKです。そうでない場合、ほとんどの場合パスワードが間違っています
最初は思ったほど難しくありません。一般的に、LDAPサーバーに対する認証には、 Net_LDAP2
PEAR packageまたは Zend_Ldap
Zend Framework のうち、実際にNet_LDAP2
を使用した経験はありません(コードはよく知っていますが)Zend_Ldap
は非常にうまく機能しますActive DirectoryサーバーまたはADAMSサーバー(これは明らかに作業対象です)。
これは、Zend_Ldap
を使用してトリックを実行します。
$options = array(
'Host' => 'ad.blueroom.ac.uk',
'useStartTls' => true,
'accountDomainName' => 'blueroom.ac.uk',
'accountCanonicalForm' => 4,
'baseDn' => 'ou=bluebird,dc=bluebird,dc=ac,dc=my',
);
$ldap = new Zend_Ldap($options);
try {
$ldap->bind('user', 'password');
} catch (Zend_Ldap_Exception $e) {
// something failed - inspect $e
}
// bind successful
$acctname = $ldap->getCanonicalAccountName('user', Zend_Ldap::ACCTNAME_FORM_DN);
http://code.activestate.com/recipes/101525/ を参照しながら http://us3.php.net/ldap およびその他の結果を [php ldap authentication] のGoogle検索。
@Stephenは良い点を提供してくれました。以下に、ADを使用して認証するための単純なPHPコードを示します。
次のコードを使用します。
$ldap = ldap_connect($Host); // e.g. 165.5.54.6 or an URL
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); // Recommended for AD
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
$bind = ldap_bind($ldap, $username.'@'.$userDomain, $passwrod);
if($bind){
// successful authentication.
}
http://pear.php.net/package/Net_LDAP2/docs を使用できます。
ドキュメントがとる接続の例:
// Inclusion of the Net_LDAP2 package:
require_once 'Net/LDAP.php';
// The configuration array:
$config = array (
'binddn' => 'cn=admin,ou=users,dc=example,dc=org',
'bindpw' => 'password',
'basedn' => 'dc=example,dc=org',
'Host' => 'ldap.example.org'
);
// Connecting using the configuration:
$ldap = Net_LDAP2::connect($config);
// Testing for connection error
if (PEAR::isError($ldap)) {
die('Could not connect to LDAP-server: '.$ldap->getMessage());
}