2017-11-13 6 views
0

MVC와 함께 ASP.NET ID를 사용하고 각 장치에 대해 각 로그인 한 사용자마다 sessionId (GuId 문자열)를 설정합니다. 아이디어는 사용자가 장치 세션을 제거 할 수 있고 그 장치가 더 이상 로그인되지 않는다는 것입니다 (dropbox 및 google에서 수행됨).ASP.NET 사용자 지정 클레임의 ID 및 유효성 검사

현재이 sessionId는 ASP.NET ID의 클레임으로 설정되어 있으므로 인증 쿠키에 전달됩니다.

Authenrication를 들어

나는 샘플로 ASP.NET ID를 사용 : app.UseCookieAuthentication (새 CookieAuthenticationOptions {....

내 질문 :

  1. 이 주장 오른쪽으로 내 sessionId가 설정되어 여기 방법? 전체 인증 과정에서 내가 그 sessionId가의 주장을 검증 할 수 있습니다 또한

  2. ?

  3. 현재 나의 아이디어는 각 요청에 대해 데이터베이스 테이블에 대해이 sessionId를 확인하는 것입니다. Request.Sessions 대신 sessionId 또는 여기에 다른 아이디어를 저장해야합니까? 사용자가 여러 유효한 세션을 가질 수 있기 때문에

감사합니다,

+0

확실하지 않거나 도움이 될 것입니다. MVC 프로젝트를 만들 때 인증 방법을 설정할 수있는 옵션이 있습니다. 예제 코드를 생성해야합니다. 나는 당신의 사용자 트랙을 유지하는 상황에 대해 어느 정도 만족해야한다. – Dragonvil

+0

ASP.NET ID를 통해 나는 app.UseCookieAuthentication (new CookieAuthenticationOptions {.... )을 사용합니다. 내 sessionIds의 유효성을 검사하려면이 옵션을 어떻게 사용해야합니까? – spiros

+0

이전 답변에서 언급 했어야 할 사항 : 어디에서나 사용자에게 서명하고 싶은 경우 AspNetUser 테이블에서 보안 스탬프의 값을 변경하기 만하면됩니다. 'SecurityStampValidator'는 auth 쿠키를이 값과 비교하여 검사하고, 변경된 경우 서명합니다. – Matthew

답변

0

, 당신은 주장 이러한 저장하거나 저장하는 자신의 테이블을 만들어야 하나. 소유권 주장은 이미 Identity로 작성되었으므로 가장 쉽습니다.

OnValidateIdentity 방법이 CookieAuthenticationProvider 인 것을 Startup.Auth.cs으로 확인하십시오. 현재 OnValidateIdentity 메서드가 SecurityStampValidator으로 호출되므로 세션 ID를 먼저 확인한 다음 원래 보안 스탬프 유효성 검사기를 호출하는 래퍼 메서드를 작성해야합니다. 예를 들어, 당신은 Startup 클래스에 이러한 방법을 추가 할 수 있습니다 _validate 그냥 원래의 방법 validate입니다

private Func<CookieValidateIdentityContext, System.Threading.Tasks.Task> _validate=SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
      validateInterval: TimeSpan.FromMinutes(30), 
      regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)); 
private async Task validate(CookieValidateIdentityContext context) 
{ 
    var usermanager = context.OwinContext.GetUserManager<ApplicationUserManager>(); 
    var claims = await usermanager.GetClaimsAsync(context.Identity.GetUserId()); 

    //instead of setting to true, add your session validation logic here 
    bool sessionIsValid=true; 

    if (!sessionIsValid) { 
     context.RejectIdentity(); 
     context.OwinContext.Authentication.SignOut(context.Options.AuthenticationType); 
    } 

    await _validate(context); 
} 

또한 세션 ID를 확인 새로운 방법입니다.

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    LoginPath = new PathString("/Account/Login"), 
    Provider = new CookieAuthenticationProvider 
    { 
     // Enables the application to validate the security stamp when the user logs in. 
     // This is a security feature which is used when you change a password or add an external login to your account. 
     OnValidateIdentity = validate 

    } 
}); 

난 당신이 데이터베이스에서 매번 주장을 확인해야합니다 생각이 일을하려면,하지만 난 usermanager.GetClaimsAsync이 궁극적으로이 작업을 수행 할 것으로 예상 : 그런 다음 app.UseCookieAuthentication 코드는 다음과 같은 새로운 validate 방법을 참조합니다.