2016-06-28 5 views
5

ASP.Net Core에는 사용자 인증을 처리하는 SignInManager가 있습니다. 방법 중 하나는 PasswordSignInAsync(string username, string password, bool isPersistent, bool lockoutOnFailure)입니다. lockoutOnFailure를 true로 설정하면 로그인 실패 횟수가 초과되면 일시적으로 사용자를 잠그십시오. 각 1 씩ASP.Net Core SignInManager lockoutOnFailure

  • AccessFailedCount 증가 액세스 실패, 그것은 5 안타 때 0으로 롤오버시 0
  • 로 롤오버 : 나는 다음을 참조 데이터베이스의 AspNetUsers 테이블을 보면

    LockoutTimeEnd는 향후 5 분으로 설정됩니다.

  • 그러나 LockoutEnabled도 롤오버 후 0을 유지하고, 사용자가 로그인 시도를 계속할 수 있습니다.

의도 된 기능은 다음 5 개 로그인 시도를 허용 5 분 동안 계정을 잠그는 것입니다 것 같습니다.

그래서 내 질문은됩니다

  1. 어떻게 허용 된 로그인 실패의 수를 설정합니까?
  2. 어떻게 잠금 기간을 설정합니까?
  3. 왜 잠금 트리거가 실행되지 않습니까?
+0

about the 3rd bulltet, 기본 프로젝트 템플릿에서 작동하므로 일부 코드를 공유해야합니다. – tmg

+0

이것에 대해 알아 냈습니다. "LockoutEnabled = false"를 가진 사용자는 "LockoutTimeEnd"에 관계없이 절대 잠기지 않습니다. "LockoutEnabled = true"인 사용자는 LockoutTimeEnd> DateTime.Now 인 경우에만 잠기 게됩니다. 모든 사용자를 "LockoutEnabled = false"로 설정하여 전체 잠금 메커니즘을 효과적으로 비활성화했습니다. –

+1

어떻게 설정 했습니까? 등록 작업에서 사용자를 만들 때? – tmg

답변

7
  1. 어떻게 허용 로그인 실패의 수를 설정합니까?
  2. 어떻게 잠금 기간을 설정합니까?

기본 프로젝트 템플릿 (Startup 클래스 ConfigureServices 방법) 신원 서비스 AddIdentity<TUser, TRole> 구성을위한 확장 방법을 사용합니다. 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(); 

이러한 LockoutOptions의 기본값이기 때문에 위가 pointeless 인을 사용할 수 있지만, 당신이 원하는대로 당신은 수를 변경합니다.

관련 문제