2011-02-19 25 views
5

私のアプリケーションは、LDAP(通常はアクティブディレクトリ)を経由して、許可されたユーザを定義します。LDAPユーザ認証が

  1. 顧客がLDAPサーバ(TreeA)とグループ(グループA)を定義します。 GroupAのすべてのユーザーがアプリケーションを使用できます。
  2. ログイン時には、ユーザーが自分のユーザー名とパスワードを送信します - 資格情報の著作を持つLDAP TreeAに結合し、そのユーザーアカウントがグループAにある場合、彼らは

を行ってもいいです、私は」 2つのActive Directoryがお互いを信頼し、TreeAの指定されたGroupAにTreeBのユーザーが含まれている状況が発生します。私はTreeAからUserB(TreeBから)を認証しようとしているので、ステップ#2は失敗します。

アプリケーションはTreeAにアクセスできるので、GroupAを見て、そこでUserBを見ることができます。しかし、ユーザー名とパスワードを認証するためにTreeBにバインド要求を送信する必要があることをどのように知っていますか?

これにアプローチするより良い方法はありますか?
このようなTreeAへのバインド要求は、信頼関係があるため自動的にTreeBに転送されますか?

+0

treeAとtreeBの間でどのような信頼がありますか?彼らは同じ森林にいますか? –

答えて

1

LDAPサーバー(TreeA)で設定に問題がある可能性があります。あなたはTreeAとTreeBの間に信頼関係があると書いたので、UserB(TreeBから)をTreeAのGroupAのメンバーとして追加することができます。これを行うことができれば、TreeAとTreeBの間の正しい方向への信頼を確立することができます。 Active Directory Bはユーザーパスワードのみを検証するが、既定のユーザーBはActive Directory Aのリソースにアクセスできないことを意味することを理解する必要があります.UserBには、サーバーAにLDAPバインドを許可する権限がありません。その場合、問題は、UserBにサーバーAに対するリモートログイン許可とGroupAへの読み取りアクセスを許可し、おそらくGroupAが存在するOUへの読み取りアクセス許可を与えることによって解決される。 Insight for Active Directoryを試してADアクセスを監視して、アクセス許可の問題をローカライズすることができます。

その他の原因として、LDAPアクセスに使用するAPIの使用が考えられます。ご質問では、APIについての情報は書いていません。 ldap_bind_sのようなWin32 APIを使用するか、.NETでDirectoryEntryを使用しますか?いずれの場合も、バインド中に明示的にドメイン名をUserBのアカウント名と一緒に使用するか、ユーザーの現在のユーザー資格情報の名前とパスワードの両方にnullを使用することが重要です。

TreeAへのすべてのアクセス(また、UserBについてのテスト用)に対して、TreeAからの固定アカウントを使用すると、この問題は解決する可能性がありますが、アプリケーションの使用が可能である可能性があります。

あなたの疑問にお答えしている情報があれば、問題を絞り込むことができます。

+0

私はldap_bind ...関数を使用します。現在、ユーザーはログイン時に自分のドメイン名を送信しません。あなたがそれに言及すると、それはおそらく問題です(試してみましょう!)。 – DougN

+0

@DougN:あなたの問題を解決するための進歩はありますか?必要があり、質問のテキストにコードの断片を含める必要がある場合に役立ちます。あなたが使用するオペレーティングシステムと環境についてのより多くの情報も役に立つかもしれません。 – Oleg

0

オブジェクトが常に両方のサーバーに存在するようにldap replicationを使用する必要がありますか?

+0

それはいいですが、私のサーバーではないので、私はそのオプションを持っていません。 – DougN

0

アプリケーションはので、私はそれがグループA に見て、そこにユーザーBを見ることができたと仮定しTreeA、 へのアクセスを持っています。しかし、どうすれば は、 のユーザ名とパスワードを認証するために、 のリクエストをTreeBに送信する必要があることを知っていますか?

グループAでmember属性のようなものに見えるかもしれない各メンバーの完全な識別名(DN)、与える:

member: CN=User1,OU=People,DC=TreeA,DC=foobar,DC=com 
member: CN=User2,OU=People,DC=TreeB,DC=foobar,DC=com 

そうに、「ユーザー2」は、認証を試みるとき、あなたが一致する可能性がCNと 'TreeA'の代わりに 'TreeB'に対して認証する必要があることを知っている。 (おそらく、あなたは、DNをADサーバーのホスト名にマッピングしているテーブルを持っているでしょう。)あるいは、「TreeA」から「そのようなユーザーがいない」とすれば、それをブルートフォースして「TreeB」を試してみてください。

2つのツリーに重複したユーザー名の大文字小文字を処理する方法を決定する必要があります。

もう1つの方法として、認証するツリーを指定する必要があります。たとえば、 '[email protected]'のようなログイン名でログインします。

0

のは、あなたがお互いを信頼し、ドメインAとドメインBを持っている、とあなたは、ドメインAのサーバーにドメインAに対して、ドメインBからユーザBを認証する場合ので、あなたが何をすべきかと言うてみましょう:

  1. Win32 APIを使用してドメインAのユーザーBを偽装します。

  2. DirectoryEntryを使用してドメインAに対してユーザーBを認証すると、割り当てられたグループなどの他のユーザー情報のドメインAのADにアクセスできます。

Windows認証を使用するASP.NETアプリケーションで実装しました。

希望すると、