web-dev-qa-db-ja.com

LDAP経由でActive Directoryに接続する

C#を使用してローカルのActive Directoryに接続したい。

この優れたドキュメント が見つかりました。

しかし、LDAPを介して接続する方法が実際にはわかりません。

あなたの誰かが質問されたパラメータの使用方法を説明できますか?

サンプルコード:

  static DirectoryEntry createDirectoryEntry()  
  {  
     // create and return new LDAP connection with desired settings  

     DirectoryEntry ldapConnection     = new DirectoryEntry("rizzo.leeds-art.ac.uk");  
     ldapConnection.Path               = "LDAP://OU=staffusers,DC=leeds-art,DC=ac,DC=uk";  
     ldapConnection.AuthenticationType = AuthenticationTypes.Secure;  
     return ldapConnection;  
  }  

Active Directoryサーバーのホスト名とIPアドレスがわかりました。 DC=xxx,DC=xxなどはどういう意味ですか?

43
Waren Schild

DCはドメインです。ドメインexample.comに接続する場合、DCは次のとおりです。DC= example、DC = com

実際には、ドメインコントローラーのホスト名やIPアドレスは必要ありません(たくさんある可能性があります)。

ドメイン自体に接続していると想像してください。したがって、ドメインexample.comに接続するには、次のように書くだけです。

DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");

これで完了です。

接続に使用するユーザーとパスワードを指定することもできます。

DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com", "username", "password");

また、必ず大文字でLDAPを記述するようにしてください。どこかを読んで大文字で書いて問題を解決するまで、いくつかのトラブルと奇妙な例外がありました。

directoryEntry.Pathプロパティを使用すると、ドメインをより深く掘り下げることができます。そのため、特定のOU(組織単位)のユーザーを検索する場合は、そこに設定できます。

DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");
directoryEntry.Path = "LDAP://OU=Specific Users,OU=All Users,OU=Users,DC=example,DC=com";

これは、次のAD階層と一致します。

  • com
      • ユーザー
        • すべてのユーザー
          • 特定のユーザー

階層を最も深いところから最も高いところに書くだけです。

これでたくさんのことができるようになりました

たとえば、アカウント名でユーザーを検索し、ユーザーの姓を取得します。

DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");
DirectorySearcher searcher = new DirectorySearcher(directoryEntry) {
    PageSize = int.MaxValue,
    Filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=AnAccountName))"
};

searcher.PropertiesToLoad.Add("sn");

var result = searcher.FindOne();

if (result == null) {
    return; // Or whatever you need to do in this case
}

string surname;

if (result.Properties.Contains("sn")) {
    surname = result.Properties["sn"][0].ToString();
}
82
The-First-Tiger

ldapConnectionはサーバーアドレスです:ldap.example.com Ldap.Connection.Pathは、LDAP形式で挿入を使用するADS内のパスです。

OU = Your_OU、OU = other_ou、dc = example、dc = com

ADのルートに戻る最も深いOUから始め、トップレベルドメインを含むすべてのものが得られるまで、すべてのドメインセクションにdc = Xを追加します。

今、私は認証するためのパラメータを見逃しています、これはユーザー名のパスと同じように機能します

CN = username、OU = users、DC = example、DC = com

LDAPの概要

2
s.lenders

メールアドレスが「[email protected]」の場合、以下のようにcreateDirectoryEntry()を変更してみてください。

XYZは、mydomainディレクトリに存在する場合のオプションのパラメーターです

static DirectoryEntry createDirectoryEntry()
{
    // create and return new LDAP connection with desired settings
    DirectoryEntry ldapConnection = new DirectoryEntry("myname.mydomain.com");
    ldapConnection.Path = "LDAP://OU=Users, OU=XYZ,DC=mydomain,DC=com";
    ldapConnection.AuthenticationType = AuthenticationTypes.Secure;
    return ldapConnection;
}

これは基本的にcom-> mydomain-> XYZ-> Users-> abcdをチェックします

メイン関数は次のようになります。

try
{
    username = "Firstname LastName"
    DirectoryEntry myLdapConnection = createDirectoryEntry();
    DirectorySearcher search = new DirectorySearcher(myLdapConnection);
    search.Filter = "(cn=" + username + ")";
    ....    
1
Pavan