8


2

C#でActiveDirectoryを使い始める

私はC#とWPFで記述された.NETアプリケーションに取り組んでいます。 このアプリケーションでは、http://en.wikipedia.org/wiki/Active_Directory [Active Directory]サーバーに対してユーザーを認証します。 最終的には、他のhttp://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol[LDAP]実装もサポートしたい場合があります。したがって、ActiveDirectory固有でなくてもこれを構築できれば有利です。

これを始めるための最良のアプローチは何ですか? チェックアウトすべき優れたリソースはありますか? Active Directoryとの通信を処理するための.NETのライブラリがあると聞きましたが、一般的なLDAPライブラリはありますか? 何かアドバイスは大歓迎です!

_注:.NET 3.5._を使用しています

5 Answer


5


NET 3.5 made this tremendously easier than it used to be by adding the

System.DirectoryServices.AccountManagement名前空間。 .NET 3.5を使用していない場合を除き、この名前空間に直接入ります。 いつものように、http://en.wikipedia.org/wiki/The_Code_Project [The Code Project]にはhttp://www.codeproject.com/KB/system/usingAccountManagement.aspx [多くの使用例を示すもの]があります。

ユーザーを認証する単純な例:

var pc = new PrincipalContext(ContextType.Domain, "MyDomain", "DC=MyDomain,DC=com");
return pc.ValidateCredentials(username, pass);


4


可能であれば、System.DirectoryServices.AccountManagementの使用を避けます。 それは確かに物事を簡単にするように見えますが、私はそれで多くの問題を抱えています(例えば、特定のポートを時々無視するなど)、それは実際にはSystem.DirectoryServicesの単なる軽いラッパーです。 他のLDAPディレクトリでうまくいくかもしれませんが、それ用に設計されたものではありません。

System.DirectoryServices.Protocolsアセンブリをお勧めします。 始めるのが少し難しく、少し手間がかかりますが、パフォーマンスが向上し、はるかに柔軟性があり、はるかに標準に準拠していることがわかります。 ADを含む多くの異なるディレクトリに対してそれを使用することで大きな成功を収めました。

MSDNには素晴らしいhttp://msdn.microsoft.com/en-us/library/bb332056.aspx [紹介記事]があり、必要となる可能性が高いほとんどのシナリオをカバーしています。


2


NET 3.5を使用している場合は、 `System.DirectoryServices.AccountManagement`名前空間を確認してください。以前よりもずっと簡単になりました!

また、トピックに関するこのMSDN記事http://msdn.microsoft.com/en-us/magazine/cc135979.aspx[.NET Framework 3.5でのディレクトリセキュリティプリンシパルの管理]を確認してください。

「汎用」のままで他のLDAPディレクトリをサポートする必要がある場合は、http://msdn.microsoft.com/en-us/library/bb332056.aspx [System.DirectoryServices.Protocolの概要]も参照してください。 ]これは、低レベルのLDAP呼び出しを処理するMicrosoft .NETアセンブリおよびネームスペースであり、LDAP準拠のディレクトリ(Sun、Novellなど)に対して機能するはずです。


1


`System.DirectoryServices`アセンブリを使用する必要があります。 サンプルを次に示します。http://www.codeproject.com/KB/system/activedirquery.aspx [.NETクラスとLDAPクエリを使用したActive Directoryのクエリ]


0


ActiveRecordパターンをベースにした私のOSSプロジェクトは、次のように参照することができます(これはオープンソースなので、DirectoryEntryを使ってADを操作する方法を見つけることができます。このライブラリを開発します。

using (var userObject = UserObject.FindOneByCN(this.ADOperator, “pangxiaoliang”))
{
     if(userObject.Email == "[email protected]")
     {
          userObject.Email = "[email protected]";
          userObject.Save();
     }
}

そして、あなたはそれでADを操作するのが簡単であると思うでしょう、あなたがそれに興味を持っていないならば、私の答えを無視してください。 ADについての質問は私に連絡してください:)