3

ユーザー属性を読み取り、ユーザーを認証するために LDAP サーバーと通信できるように、.Net アプリケーションに機能を構築しようとしています。OpenDS を使用してテスト ディレクトリ サーバーをセットアップし、カスタム属性とオブジェクトを追加し、新しいオブジェクト タイプでユーザーを追加しました。カスタム属性値を読み取ろうとするまで、すべて正常に機能します。次のようになります。

{"Unknown error (0x8000500c)"}
at System.DirectoryServices.PropertyValueCollection.PopulateList()
at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)

この投稿(適切に形成された oid を使用)とこの投稿(LDAP パスに完全修飾ドメイン名を使用 - LDAP://mymachine.company.local/... のようなものを使用しています)から提案を試みました。の人は、COM エラー コードが E_ADS_CANT_CONVERT_DATATYPE を意味するため、属性またはスキーマに何か問題があることを示唆していますが、属性は DirectoryString として設定されており、同じタイプの他のデフォルト フィールドを読み取ることができます。

OpenDS での作業は Active Directory と同じようには機能しないことを理解しています。私は AD 用の別のモジュールを持っていますが、これは問題なく動作しています。OpenDS または Sun One LDAP 実装とのやり取りの経験がある人がいるかどうか疑問に思っています。

考え?Google で OpenDS と .NET を一緒に扱っているものがあまり見つからないので、何か他のことをすべきだと思います。私が言ったように、AD は問題なく動作しますが、OpenDS でもこれを実行できるようにしたいと思っています。

ありがとう!

さびた

4

2 に答える 2

0

Linux OpenLdap データベースから複数値の文字列を読み取ろうとして、このエラーが発生しました。

XP と Server 2003 でエラーが発生することがわかったのでバグのようですが、Windows 7 と Server 2008 では、インストールされている .NET バージョンに関係なく、同じコードが値を返します。

ただし、より直接的なアクセスを使用して C# の回避策を見つけました。Directory.Services に加えて、参照、COM、'Active DS Type Library' を追加する必要があります。

var dirEntry = new DirectoryEntry("ldapDn", "logonDn", "logonPass");
var nativeEntry = (ActiveDs.IADsPropertyList)dirEntry.NativeObject;
var propEntry = (ActiveDs.IADsPropertyEntry)nativeEntry.GetPropertyItem("attributeName", 3);
foreach (ActiveDs.IADsPropertyValue propValue in (object[])propEntry.Values)
{
    Debug.Print(propValue.CaseIgnoreString);
}

これは、私自身の単純なニーズに合わせてまとめられたものです。参照として使用される完全なヘルパー クラスと、AdsType Enumsを次に示します。

于 2012-08-22T17:08:27.847 に答える
0

ldapsearchLDAP クライアントが実際に必要なエントリと属性を要求して受信できることを確認するなど、既知の優れたツールを使用します。例えば:

ldapsearch --hostname hostname \
           --port port \
           --bindDn your-auth-id \
           --bindPassword credentials-for-your-auth-id \
           --useSSL     \
           --trustAll \
           --baseDn your-base-object \
           --searchScope the-scope-you-use \
           '(&)' \
           your-custom-attribute-names

LDAP クライアント コードと同じパラメーターを使用します。上記の検索が成功した場合、サーバーは正しく構成されており、エントリが存在し、認証 ID にはそれらのエントリとカスタム属性を取得する権限があります。そうしないと、LDAP クライアント コードで問題が発生する可能性があります。

こちらもご覧ください

于 2012-06-12T17:45:44.063 に答える