1

私は次のコードを持っています:

$bind = new COM("LDAP://CN=GroupName,OU=Groups,OU=Division,DC=company,DC=local");

コマンドプロンプトから実行すると、正常に実行されます。IIS / PHP / ISAPIで実行すると、barfsします。

Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `LDAP://CN=...[cut]...,DC=local':
An operations error occurred. ' in index.php
Stack trace:
  #0 index.php: com->com('LDAP://CN=...')
  #1 {main} thrown

IISはWindows認証用に構成されており(匿名、基本、ダイジェストなし)、コマンドプロンプトと同じユーザーとして接続しています。IISログファイルまたはイベントログに特定のエラーが見つかりません。

この演習の主な目的は、スクリプトにユーザークレデンシャルを保持せず、IIS認証に依存してそれらをActiveDirectoryに渡すことです。LDAPを使用して同じことを実行できることは理解していますが、私が知る限り、資格情報を渡すことはできません。

おそらく、ASPに移植しようとしたときに発生するエラーに何らかの形で関連しています。エラー80072020(現在検索中)が発生します。

イベントログには、異常なことは何も示されていません。警告もエラーもありません。完全なセキュリティ監査が有効になっており(セキュリティポリシーのすべての項目で成功と失敗)、Webページに対して認証したすべてのユーザーに対して成功したWindowsログオンが表示されます(これは予想されます)。

4

4 に答える 4

3

IISでWindows認証を使用しているため、Windowsイベントログにセキュリティイベントが記録されている可能性があります。イベントログでセキュリティイベントとアプリケーションイベントを確認し、何らかのアクセス許可の問題が発生していないかどうかを確認します。

また、基本的にはLDAPを介してADと通信しているだけなので、COMではなくPHP用のネイティブLDAPライブラリを使用することを検討するかもしれません。

おそらくphp.iniで拡張機能を有効にする必要があります。おそらく一見の価値があります。

于 2008-09-17T15:59:22.577 に答える
2

それは今働いているようです。

Active Directory のコンピューター オブジェクトに対して [このコンピューターを委任に対して信頼する] を有効にしました。通常、IIS は、委任信頼を有効にしないと、ユーザーを認証した後、ネットワーク上でユーザーを偽装することはできません (私の場合は、Active Directory を照会するためにドメイン コントローラーに)。

ダイジェストは偽装トークンとして使用することが信頼されていないため、NTLM やその他のダイジェスト認証ではなく、Kerberos を使用して認証していることを確認する必要があります。

PHP スクリプトと ASP スクリプトの両方が修正されました。

于 2008-09-17T17:34:59.557 に答える
0

私はAD/COM / IISの専門家ではありませんが、アクセス許可の問題である可能性があります。たとえば、IUSR_computernameユーザーがディレクトリ内で適切なアクセス権を持っていない、または特定のユーザーとしてバインドしていませんか?

私にとっての警告ベルは、コマンドラインからは正常に実行されますが(たとえば、アクセス許可で実行されます)、IISでは失敗します(たとえば、アクセス許可ではありません)。

于 2008-09-17T16:14:11.670 に答える
0

LDAP を使用する場合は、Maia Mailguard に使用する LDAP 認証コードを示します。lauth_ldapという名前の関数を探します。

LDAPバージョン3が必要だと思うので、ldapにそのパラメーターを設定する必要があります。パスワードを確認するには、ldap bind 関数を使用して LDAP サーバーを認証させます。

于 2008-09-17T16:03:43.910 に答える