フォレストの信頼が確立されたADサーバーがいくつかあるため、さまざまなドメインのWindowsユーザーが制限されたリソースにアクセスできます。domainA.comとdomainB.comがあるとすると、ドメインdomainB.comのすべてのユーザーがdomainA.comのリソースにログインできます。セキュリティ上の理由から、LDAPサーバーへの匿名アクセスは管理者によって無効にされています。
次に、OpenLDAPクライアントを使用して、PHPコード内のすべてのLDAPサーバーのすべてのユーザーを一覧表示する必要があります。以下は、domainB.comからすべてのユーザーに関する情報を取得するためのPHPコードです。
define('USER', 'user@domainA.com'); // User from domainA.com here
$ldap = ldap_connect('domainB.com') or die('Bad connection');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
ldap_bind($ldap, USER, PASS) or die('Cannot bind');
スクリプトが「バインドできません」というメッセージとLDAPエラー「49無効なクレデンシャル」で終了します。ADからの追加情報:
80090308:LdapErr:DSID-0C0903A9、コメント:AcceptSecurityContextエラー、データ52e、v1db1
問題は単純な認証メカニズムにあると思います。なぜなら、user @domainA.comに対して同じクレデンシャルを持つLdapAdministratorクライアントでGSSNegotiate認証を使用すると、すべて問題がないからです。
user@domainA.comからの資格情報を使用してdomainB.comでバインドを成功させるにはどうすればよいですか?
SASLDIGEST -MD5を使用したUPD1認証
ldap_sasl_bind ( $ldap, '', $pass, 'DIGEST-MD5', null, 'user@domainA.com');
ADからのログ:
コンピューターは、アカウントの資格情報を検証しようとしました。 認証パッケージ:WDigest ログオンアカウント:ユーザー ソースワークステーション:DOMAINA エラーコード:0xc000006a アカウントがログオンできませんでした。 主題: セキュリティID:NULL SID アカウント名: - アカウントドメイン:- ログオンID:0x0 ログオンタイプ:3 ログオンに失敗したアカウント: セキュリティID:NULL SID アカウント名:user@domainA.com アカウントドメイン:domainA.com 障害情報: 失敗の理由:ログオン中にエラーが発生しました。 ステータス:0xc000006d サブステータス:0xc000006d プロセス情報: 発信者プロセスID:0x0 発信者プロセス名:- ネットワーク情報: ワークステーション名:- 送信元ネットワークアドレス: ソースポート: 詳細な認証情報: ログオンプロセス:WDIGEST 認証パッケージ:WDigest トランジットサービス:- パッケージ名(NTLMのみ):- キーの長さ:0 このイベントは、ログオン要求が失敗したときに生成されます。アクセスが試みられたコンピューターで生成されます。 件名フィールドは、ログオンを要求したローカルシステムのアカウントを示します。これは最も一般的にはサーバーサービスなどのサービス、またはWinlogon.exeやServices.exeなどのローカルプロセスです。 [ログオンの種類]フィールドは、要求されたログオンの種類を示します。最も一般的なタイプは、2(インタラクティブ)と3(ネットワーク)です。 [プロセス情報]フィールドは、システム上のどのアカウントとプロセスがログオンを要求したかを示します。 [ネットワーク情報]フィールドは、リモートログオン要求が発生した場所を示します。ワークステーション名は常に使用できるとは限らず、場合によっては空白のままになることがあります。 認証情報フィールドは、この特定のログオン要求に関する詳細情報を提供します。 -トランジットサービスは、このログオン要求に参加した中間サービスを示します。 -パッケージ名は、NTLMプロトコルの中で使用されたサブプロトコルを示します。