2016-06-28 147 views
5

ASP.Net Core具有處理用戶身份驗證的SignInManager。其中一種方法是PasswordSignInAsync(string username, string password, bool isPersistent, bool lockoutOnFailure)。將lockoutOnFailure設置爲true應該在一定次數的登錄失敗嘗試後臨時鎖定用戶。ASP.Net Core SignInManager鎖定失敗

在數據庫我看到以下綜觀AspNetUsers表:對於每個

  • AccessFailedCount增加1失敗訪問,當它擊中5它翻轉到0。
  • 一旦翻轉至0 LockoutTimeEnd設置爲未來5分鐘。然而
  • LockoutEnabled甚至側翻後依然爲0,並且用戶可以繼續嘗試登錄。

它看起來像預期的功能是允許5次登錄嘗試,然後鎖定帳戶5分鐘。

所以我的問題是有:

  1. 如何設置允許登錄失敗次數?
  2. 如何設置鎖定期限?
  3. 爲什麼不鎖定觸發器?
+0

關於你的第三個bulltet,它適用於默認的項目模板,所以你必須分享一些代碼,尋求幫助 – tmg

+0

我發現了這個。無論「LockoutTimeEnd」如何,任何使用「LockoutEnabled = false」的用戶都不會被鎖定。只有當LockoutTimeEnd> DateTime.Now時,具有「LockoutEnabled = true」的用戶纔會被鎖定。我已將所有用戶設置爲「LockoutEnabled = false」,有效地禁用了整個鎖定機制。 –

+1

你是如何設定的?在註冊操作中創建用戶時? – tmg

回答

7
  1. 如何設置允許登錄失敗次數?
  2. 如何設置鎖定期限?

默認的項目模板使用配置的身份服務AddIdentity<TUser, TRole>(在StartupConfigureServices法)的擴展方法。這種方法有一個過載,您可以配置IdentityOptions

而不是

services.AddIdentity<ApplicationUser, IdentityRole>() 
    .AddEntityFrameworkStores<ApplicationDbContext>() 
    .AddDefaultTokenProviders(); 

您可以使用

var lockoutOptions = new LockoutOptions() 
{ 
    AllowedForNewUsers = true, 
    DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5), 
    MaxFailedAccessAttempts = 5 
}; 

services.AddIdentity<ApplicationUser, IdentityRole>(options => 
    { 
     options.Lockout = lockoutOptions; 
    }) 
    .AddEntityFrameworkStores<ApplicationDbContext>() 
    .AddDefaultTokenProviders(); 

以上是pointeless,因爲這些都是LockoutOptions默認值,但是你可以隨意改變他們。