他の人がこれをどのようにコーディングしているかに興味があります。なぜなら、私はそれを正しく理解していないか、何かが欠けているか、あるいはおそらく私が正しくやっているからです!
まず第一に、これは LDAP の Active Directory インスタンスではありません。その OpenDS は、いくつかの構文上の違いを除けば、それほど重要ではありません。
したがって、ツリー構造を次のように設定しているとします。
-dc=somedomain,dc=com
-uid=rootuser
-ou=Group1
-uid=username1
-uid=username2
-ou=Group2
-uid=username3
-uid=username4
「rootuser」として認証するには、System.DirectoryServices.DirectoryEntry オブジェクトを作成するときに完全修飾ユーザー名を渡す必要があります。この場合:
uid=rootuser,dc=何らかのドメイン,dc=com
ただし、ツリー内の他のユーザーについては、認証を受けるためにユーザー名に追加する LDAP パスを事前に知っておく必要があります。たとえば、これは失敗します。
uid=username1,dc=何らかのドメイン,dc=com
しかし、これはうまくいきます:
uid=username1,dc=somedomain,dc=com,ou=Group1
だから私の質問は、ログイン時にユーザーがそのパスを構築するために属している特定のグループがわからない場合、これをどのように処理するのですか? 私がそれを行うことができる唯一の方法は、最初の呼び出しを「rootuser」として行うことです。これにより、ツリー全体にアクセスできるようになり、System.DirectoryServices.DirectorySearcher を使用してその特定のユーザー (つまり、username1) をスキャンします。
using (DirectorySearcher searcher = GetDirectorySearcher()) {
searcher.Filter = "(&(objectClass=person)(uid=" + userName+ "))";
SearchResult result = searcher.FindOne();
return result.GetDirectoryEntry().Path;
}
その時点で、ログインしたいユーザーのパスがあり、実際の認証に進むことができます。私はここでベースから離れていますか、それともこれは一般的にどのように行われますか?
ありがとう!