0

ユーザーの電子メール アドレスをキーとして使用して、フォーム ベースの C# ログイン シナリオで任意の Windows アカウントを検索しています。ユーザーの検索は正常に機能し、派生したUserPrincipalEx罰金が返されます。

ただし、バインドを使用してログインを検証しようとすると、常に成功します。

// we can't use ValidateCredentials because it's too broken - multiple attempts each time,
// can't always negotiate properly, etc.
//if (!_principalContext.ValidateCredentials(userPrincipal.UserPrincipalName, password)) {
//    return LoginValidationResults.ValidationFailed;
//}
try {
    using (var directoryEntry = new DirectoryEntry("LDAP://" + _domain + "/" + _principalContext.Container,
        userPrincipal.UserPrincipalName, password, AuthenticationTypes.FastBind)) {
        var forceBind = directoryEntry.NativeObject;
        Log.DebugFormat("Validation successful ({0}).", forceBind);
        return LoginValidationResults.Valid;
    }                    
}
catch (COMException ex) {
    if (ex.ErrorCode != -2147023570) {
        Log.DebugFormat("Validation exception: {0}", ex.ToString());
        throw;
    }
    Log.Debug("Validation failed.");
    return LoginValidationResults.ValidationFailed;
}

いくつかのケースでは、私はそれらが何であるかまだわかりませんが、私が与えたパスワードに関係なく、アカウントは常に正常にバインドされます.

これはなぜですか?

4

1 に答える 1

0

そこで、いくつかのパケット キャプチャを使用してこれを調べたところ、後続のすべてのバインドで空白のユーザー名が使用されていることがわかりました。

案の定、問題のユーザーのnullUPN は空白 (実際には - 設定されていません) でした。これは、私たちのシナリオでは決して起こらないはずですが、実際に起こりました。これは壊れたユーザー ケースなので、それを検出して例外をスローします。

于 2012-10-11T17:33:13.927 に答える