2012-01-02 7 views
4

私はSystem.DirectoryServicesを使用して、アクティブディレクトリに照会して、winformsアプリケーションでユーザーの情報を認証/取得します。以下のようなもの:.NET FrameworkでのLDAPのサポート

var path = "LDAP://" + domain; 
var entry = new DirectoryEntry(path); 
DirectorySearcher myDirectorySearcher = new DirectorySearcher(entry); 
var filter = string.Format("(&(ObjectClass={0})(sAMAccountName={1}))", "person", username); 
myDirectorySearcher.Filter = filter; 

私はこのコードを企業のActive Directoryでしかテストできません。これはLDAPをサポートしている技術であれば動作しますか?

答えて

7

System.DirectoryServices名前空間は、Active Directory用に最適化されています。これは他のLDAPサーバーに対しても有効です。特定の制限があります。

は、より低レベルのLDAP実装である(.NET 2.0の新機能)System.DirectoryServices.ProtocolsMSDN documentationintro MSDN articleを参照してください)名前空間あります - あなたはより多くの仕事をし、より多くのコードを記述する必要がありますが、それはより移植し、より多くのです他のLDAPストアと連携する可能性があります。

.NETのActive Directoryを使用するためには、より良い、より簡単なアプローチであるSystem.DirectoryServices.AccountManagementMSDN documentation)の名​​前空間(.NET 3.5の新機能)もあります。しかし、これは私が知る限り、Active Directoryだけです。

+0

他のLDAPサーバーの 'System.DirectoryServices'の制限は何ですか? – Kamyar

+1

@Kamyar:他のLDAP実装に完全に依存しています。ベンダーによっては若干の偏差で標準を実装しています(ほとんどの場合、標準はほとんど解釈の余地があります)。最も顕著には、例えば、 Novell NDS(NDS 7の時点でLDAPをサポートすると主張している) MicrosoftのS.DS実装。 (Novell NDS 7が使用する)正しく覚えていれば、LDAPの 'O = ....'要素をサポートしていません。そして一部のユーザーはOpenLDAPに対してS.DSを使用しようとしましたが、いくつかの不一致/非互換性も発見されました。それらのブログの記事/記事を見つけるためにGoogleまたはBingを使用してください! –

+0

ありがとうございます。 http://stackoverflow.com/q/8700115/337294もご覧ください。 – Kamyar

1

あなたはこのように見えるようにフィルタを変更する必要があります。これは、一般的に、しかし、任意のLDAPディレクトリと連携するつもりはない

var filter = string.Format("(&(objectCategory={0})(objectClass={1})(sAMAccountName={2}))", "person", "user", username);

。たとえば、sAMAccountNameは、AD固有の属性です。

0

最後に、私はNovellネットワークでsystem.directoryservicesを使用しようとしましたが、まったく機能しませんでした。例外はまったく投げられませんでした。申し訳ありませんが、バージョン番号については具体的には言えません。

関連する問題