天天看點

ASP.NET Core Identity 系列十二

作者:opendotnet

這節我們主要介紹在ASP.NET Core Identity中如何鎖定使用者,Lockout功能為改善應用程式安全提供保障,當使用者多次輸入錯誤密碼之後,使用者賬号就會被鎖定,這個技術在防止黑客暴力攻擊方面是非常有用的,特别是反複嘗試猜測密碼

1、配置使用者鎖定功能在Identity中啟用使用者的Lockout功能,可以通過IdentityOptions 來配置,代碼如下:

ASP.NET Core Identity 系列十二

通過設定AllowedForNewUsers屬性為true啟用類使用者Lockout特性,另外設定DefaultLockoutTimeSpan 為10 并指定使用者Lockout的時間跨度為10分鐘,通過設定MaxFailedAccessAttempts=3來指定使用者最大的通路失敗次數 在AspNetUsers表中和lockout設定相關的有3列:

  • LockoutEnabled列指使用者是否啟用lockout功能
  • AccessFailedCount列記錄使用者登入失敗的次數并且在賬戶鎖定後重置為0
  • LockoutEnd列是一個DateTime 的類型,表示使用者結束鎖定的時間我們通過下圖來展示一下:
ASP.NET Core Identity 系列十二

2、在登入頁面實作使用者的Lockout功能

我們已經在ASP.NET Core Identity中建立了使用者登入功能并實作了使用者在登入過程中的認證,我們登入的功能在AccountController中,我們已經添加了一個檢查功能(result.IsLockedOut)判斷使用者是否LockOut, 并且告訴使用者等待10分鐘後再次登入

ASP.NET Core Identity 系列十二

第四列lockoutOnFailure設定為true,PasswordSignInAsync啟用了Lockout功能3、測試使用者Lockout功能運作應用程式測試該功能,我們使用錯誤的密碼嘗試登入幾次,檢視一下表AccessFailedCount 列,我們注意到這個值增長。

ASP.NET Core Identity 系列十二

如果登入次數大于兩次,我們将收到錯誤資訊(你的賬戶已經被鎖定,請等待10分鐘後再次嘗試),如下圖所示:

ASP.NET Core Identity 系列十二

檢查一下AccessFailedCount列,我們發現AccessFailedCount列值為0,并且LockoutEnd列被設定鎖定時間的結束值,如下圖所示:

ASP.NET Core Identity 系列十二

事實上,我們可以進一步通知使用者鎖定的賬号,請他重置密碼或向使用者發送通知報告,如果他們沒有登入,這意味着有人試圖破賬号

總結

在這節中我們主要涉及到圖如下内容,如何在ASP.NET Core Identity 中建立Lockout 功能,如何實作使用者的Lockout功能

源代碼位址:

https://github.com/bingbing-gui/Asp.Net-Core-Skill/tree/master/AspNetCore.Identity/Identity