1

ユーザーのパスワードが正しいかどうかを確認する必要があります。

私はこのコードを持っています:

 private bool checkOldPasswordValid(string password, string username)
    {
        using (DirectoryEntry entry = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
        {
            entry.Username = username;
            entry.Password = password;

            DirectorySearcher searcher = new DirectorySearcher(entry);

            searcher.Filter = "(objectclass=user)";
            try
            {
                searcher.FindOne();
            }
            catch (Exception ex)
            {
                return false;
            }
            return true;
        }
    }

しかし、ディレクトリサーチャーは WinNt ではサポートされていないため、すべてのレコードをループする別の方法を見つけました。

 foreach (DirectoryEntry dc in entry.Children)
            {
                // prints the name
                System.Diagnostics.Debug.WriteLine(dc.Name);
            }

ただし、これは名前を取得するだけで、パスワードを確認しません。

助けてください 。ありがとう

4

2 に答える 2

3

LDAP または WinNT に対して認証するには、必要ありませんDirectorySearcher。インスタンスNativeObjectからを取得するだけです。DirectoryEntry方法をガイドするコード サンプルを次に示します。

public bool Authenticate(string username, string password, string domain) {
    bool authenticated = false;

    using (DirectoryEntry entry = new DirectoryEntry(@"WinNT://" + domain, username, password) {
        try {
            object nativeObject = entry.NativeObject;
            authenticated = true;
        } catch (DirectoryServicesCOMException ex) {
        }
    }

    return authenticated;
}

このコードは、ユーザーが本物かどうかを返します。このクラス インスタンスを使用して NativeObject プロパティを取得できるDirectoryEntry場合、AD (またはローカル コンピューター) が偽装を使用してこのオブジェクトを取得したことを意味します。例外がスローされずにオブジェクトを取得した場合、AD (またはローカル コンピューター) が偽装されたユーザーを認証できたことを意味します。

ユーザー名とパスワードを指定せずにドメイン (またはローカル コンピューター) のみを指定することで、現在認証されているユーザーを使用できますが、ユーザー名とパスワードを指定することで、偽装を使用したいと言うので、セキュリティ インフラストラクチャは指定されたユーザー名とパスワードを使用します。このクラス インスタンスNativeObjectからプロパティを取得するためのパスワード。DirectoryEntry

AD に対して認証するには、 for を置き換えるだけ"WinNT://"です"LDAP://"

于 2010-10-14T15:38:07.343 に答える
2

DirectoryEntry 自体を使用できます。

ここの例を参照してください: http://support.microsoft.com/kb/316748

とにかく、なぜ WinNT:// を使用しているのですか?

于 2010-10-14T15:40:13.673 に答える