9

フォレストの信頼が確立された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プロトコルの中で使用されたサブプロトコルを示します。
4

2 に答える 2

2

PHP LDAP ライブラリと OpenLDAP を使用して AD サーバーに接続する Moodle を構成するときに、この問題が発生しました。解決策は非常に単純で、次の 2 つのうちの 1 つです (実際には 1 つに要約されます)。

  1. スコープ外のユーザー名を使用します (つまり、ユーザー名の後に「@example.com」はありません)。
  2. ドメイン\ユーザー名を使用

基本的に、それが要約したことの 1 つは、正しい、予想されるユーザー名の構文を取得することでした。これは特定の AD 構成に依存していると思います。さまざまな AD サーバーで 4 種類のユーザー名が機能するのを見たからです。フル DN、スコープ付きユーザー名 (つまり、電子メール アドレスのように見えます)、DOMAIN\username、およびプレーン ユーザー名です。

于 2012-01-13T15:42:18.647 に答える
1

でユーザーを指定する場合、次のldap_bindようにユーザー DN を入力してみてください:

$bind = ldap_bind($resource, 'cn=jpb,cn=users,dc=dom,dc=fr', '***'); 

もう 1 つのことは、' Active-Directory Forest ' には、' Global Catalog ' (GC)と呼ばれるディレクトリをサポートする 1 つ以上のドメイン コントローラーがあります。GC には、フォレストのすべてのディレクトリのすべてのオブジェクトが含まれています。


編集済み SASLでバインドを試すことができます

$ldap = ldap_connect('domainB.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); 
ldap_sasl_bind ( $conn, NULL,"password",'DIGEST-MD5',NULL,'user@domainA.com',NULL);
于 2011-07-08T04:08:07.103 に答える