0

数日間、私は MembershipReboot フレームワークで遊んでいますが、正直言ってとても良さそうです。私は自分のアプリケーションにそれを使用します。

ただし、私が持っている質問は、そのロックアウト機能についてです。アカウントを数回ロックしようとしましたが、何も起こらないようです。これが私の構成です

<membershipReboot requireAccountVerification="true" emailIsUsername="false" multiTenant="false" allowAccountDeletion="true" passwordHashingIterationCount="0" accountLockoutDuration="00:05:00" passwordResetFrequency="0" accountLockoutFailedLoginAttempts="2" />

3 回目または 4 回目の試行でも、問題なくログインできるようです。また、Membership が使用する DB を調査しましたが、ロックされたアカウントのフラグが見つかりません。

私の質問は、ロックアウト機能がすぐに実装されているのか、それともロジックを実行する必要があるのか​​ということです。実装されている場合、有効にできますか?

4

1 に答える 1

1

MembershipReboot でのアカウント ロックアウトは、セキュリティ設定構成の 2 つのプロパティを使用します

  • AccountLockoutFailedLoginAttempts (int、デフォルト: 10) : アカウントがロックアウトされるまでのパスワード ログイン試行の失敗回数。
  • AccountLockoutDuration (TimeSpan、デフォルト: 5 分): パスワード ログイン試行の失敗が多すぎるため、アカウントがロックされる期間。

あなたの設定では、デフォルト値を上書きしています。そのため、5 分以内に 2 回以上ログインに失敗すると、最後にログインに失敗してからさらに 5 分間、アカウントがロックされます。最後にログインに失敗してから 5 分後にログインしようとすると、ロックアウト ロジックに従ってアカウントがロックされていないため、ログインされます。5 分以内にログインを試み、失敗回数がそれを超えていない場合は、引き続きログインできます。

コードは言葉よりも優れています(VerifyPassword メソッド を確認してください) アカウントのロックダウンに必要なすべてのプロパティが UserAccounts テーブルに表示されます。つまり、LastFailedLogin と FailedLoginCount

protected virtual bool CheckHasTooManyRecentPasswordFailures(TAccount account)
    {
        var result = false;
        if (Configuration.AccountLockoutFailedLoginAttempts <= account.FailedLoginCount)
        {
            result = account.LastFailedLogin >= UtcNow.Subtract(Configuration.AccountLockoutDuration);
            if (!result)
            {
                // if we're past the lockout window, then reset to zero
                account.FailedLoginCount = 0;
            }
        }

        if (result)
        {
            account.FailedLoginCount++;
        }

        return result;
    }
于 2016-03-01T11:26:42.407 に答える