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
などはどういう意味ですか?
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階層と一致します。
階層を最も深いところから最も高いところに書くだけです。
たとえば、アカウント名でユーザーを検索し、ユーザーの姓を取得します。
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();
}
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
メールアドレスが「[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 + ")";
....