1

ASPプロジェクトでC#を使用してLDAPにアクセスするドラマがいくつかあります。これは、ユーザーが私のディレクトリサービス内に存在するかどうかを確認する非常に簡単な例です。

これがコードです。UserExists()関数がfalseを返しています

LDAPクエリがディレクトリサービスにヒットしているかどうかは完全にはわかりません。(Active Directory)

using System.DirectoryServices;

namespace UserManagement
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (UserExists("abc"))
                lblUserExists.Text = "Found Username";
        }

        public static DirectoryEntry GetDirectoryEntry()
        {
            DirectoryEntry de = new DirectoryEntry();
            de.Path = "LDAP://OU=Users,OU=Network Users,DC=domain,DC=org";
            de.AuthenticationType = AuthenticationTypes.Secure;

            return de;
        }

        public bool UserExists(String UserName)
        {
            DirectoryEntry de = GetDirectoryEntry();
            DirectorySearcher deSearch = new DirectorySearcher();

            deSearch.SearchRoot = de;
            deSearch.Filter = "(&(objectClass=user) (cn=" + UserName + "))";

            SearchResultCollection results = deSearch.FindAll();
            return results.Count > 0;
        }


    }
}
4

2 に答える 2

2

私は第一人者ではありませんが、いくつかのアイデアがあります。

  1. LDAP接続文字列が正しく表示されない-私はそれがより似ていると思ったでしょうLDAP://MyADServer:389/CN=SomeStore,OU=Users,OU=Network Users,DC=domain,DC=org

  2. ロードするためにいくつかのプロパティが必要になる場合があります。

    string[] propertiesToLoad = new string[] { "DistinguishedName", "mail" } ; ..。 deSearch.PropertiesToLoad = propertiesToLoad;

  3. おそらく、最初にユーザー名フィルターなしでデータをフェッチして、接続が機能するかどうかを確認してください。

    deSearch.Filter = "(&(objectClass=user))"

そして、後でユーザーフィルターを追加し直します。

于 2012-09-08T06:43:12.307 に答える
1

Active Directoryでエンティティを検索する際に問題が発生した場合は、ldpなどのツールを検討してください。これを使用して、パスが正しいか、オブジェクトが存在するかなどを確認できます。

于 2012-09-08T06:46:03.703 に答える