LDAPを介して内部サーバー上のActiveDirectoryに対して認証しようとしている外部Webサーバーがあります。同じコードを使用して(ホストとポートを切り替える)外部で認証することはできませんが、ローカルで接続して認証することはできます。Attask(http://www.attask.com/)など、接続および認証が可能な他のサービスがあります。
外部サーバーは現在、LDAPサポートが有効になっているPHP5.3.15を実行しているMediaTemple上のLinux(gs)です。
内部サーバーは現在、LDAPとActiveDirectoryを備えたWindowsServer2008ボックスです。
以下のコードは、私が使用している現在のPHPで、ローカルに接続できましたが、外部サーバーで問題が発生しています。基本的にPHPLDAP接続文字列を使用し、バインドを試みます。失敗すると、匿名でバインドしようとします。どちらも外部で機能しておらず、エラーを返します:LDAPサーバーに接続できません。
<?php
$username = 'username';
$password = 'password';
$ldapconfig['host'] = '00.000.000.000';
$ldapconfig['port'] = '636';
$ldapconfig['basedn'] = 'dc=client,dc=eqc,dc=local';
$ds=ldap_connect($ldapconfig['host'], $ldapconfig['port']);
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ds, LDAP_OPT_NETWORK_TIMEOUT, 10);
$dn="".$username."";
if ($bind=ldap_bind($ds, $dn, $password)) {
echo("Login correct");
} else {
echo("Unable to bind to server.</br>");
echo("msg:'".ldap_error($ds)."'</br>".ldap_errno($ds)."");
if ($bind=ldap_bind($ds)) {
$filter = "(cn=*)";
if (!($search=@ldap_search($ds, $ldapconfig['basedn'], $filter))) {
echo("Unable to search ldap server<br>");
echo("msg:'".ldap_error($ds)."'</br>");
} else {
$number_returned = ldap_count_entries($ds,$search);
$info = ldap_get_entries($ds, $search);
echo "The number of entries returned is ". $number_returned."<p>";
for ($i=0; $i<$info["count"]; $i++) {
var_dump($info[$i]);
}
}
} else {
echo("Unable to bind anonymously<br>");
echo("msg:".ldap_error($ds)."<br>");
}
}
?>
いくつかの注意:
外部LDAPサーバーはLDAPSを使用しているため、推奨されるホストはポート636のldaps://00.000.000.000です。
'username'と'username@00.000.000.000'でバインドしてみました
ファイアウォールがありますが、外部サーバーは内部LDAPサーバーに正常にpingを実行できるため、そのレベルで接続が行われます。
どんな助けでも大歓迎です。サーバー設定またはその性質のものがある場合は、知りたいです。また、ADFSをチェックアウトしましたが、テストするための簡単なスクリプトを見つけることができませんでした。それが機能しなかった場合、終わりのない時間を費やすことはありませんでした。