ASP.NET Identity의 IUserSecurityStampStore <TUser> 인터페이스 란 무엇입니까?


178

ASP.NET Identity (ASP.NET의 새로운 멤버쉽 구현)를 살펴보면 내 인터페이스를 구현할 때이 인터페이스를 발견했습니다 UserStore.

//Microsoft.AspNet.Identity.Core.dll

namespace Microsoft.AspNet.Identity
{ 
    public interface IUserSecurityStampStore<TUser> :
    {
        // Methods
        Task<string> GetSecurityStampAsync(TUser user);
        Task SetSecurityStampAsync(TUser user, string stamp);
    }
}

IUserSecurityStampStore기본적 EntityFramework.UserStore<TUser>으로 TUser.SecurityStamp속성을 가져오고 설정하는 기본적으로 구현됩니다 .

좀 더 파고 나면 a SecurityStampGuid키 포인트에서 새로 생성 된 것으로 나타납니다 UserManager(예 : 비밀번호 변경).

Reflector 에서이 코드를 검사하기 때문에 실제로 이것을 넘어서는 해독 할 수 없습니다 . 거의 모든 기호 및 비동기 정보가 최적화되었습니다.

또한 Google은 그다지 도움이되지 않았습니다.

질문은 :

  • 무엇 SecurityStampASP.NET 정체성과 그것을 사용 무엇인가?
  • SecurityStamp인증 쿠키가 생성 될 때 어떤 역할을 합니까 ?
  • 이로 인해 필요한 보안 파급 효과 나 예방 조치가 있습니까? 예를 들어,이 값을 클라이언트로 다운 스트림하지 않습니까?

업데이트 (2014 년 9 월 16 일)

소스 코드는 다음과 같습니다.


1
새로운 Identity 저장소 및 종속 OWIN 미들웨어는 @TryingToImprove가 고도로 사용자 정의 할 수 있도록 설계되었습니다. SimpleMembership과 마찬가지로 SQL Express의 최신 EF를 활용하여 즉시 사용 가능한 구현이 있습니다. 그러나 스키마, 데이터 쿼리 방법, 데이터베이스 소스 및 미들웨어까지 특정 puprose에서 사용자 정의 할 수 있습니다. 또한 MS가 발표 한 구현 자체는 여전히 발전하고 있습니다. 그렇기 때문에 모든 사람들이 특정 정의를 찾으려고 노력합니다.
Dave Alperovich

답변:


224

이는 사용자 자격 증명의 현재 스냅 샷을 나타냅니다. 따라서 아무것도 변경되지 않으면 스탬프는 동일하게 유지됩니다. 그러나 사용자의 비밀번호가 변경되거나 로그인이 제거되면 (google / fb 계정 연결 해제) 스탬프가 변경됩니다. 이것은 2.0에 제공되는 기능인 사용자에게 자동으로 서명하거나 오래된 쿠키를 거부하는 것과 같은 것들에 필요합니다.

신원은 아직 오픈 소스가 아니며 현재 파이프 라인에 있습니다.

편집 : 2.0.0으로 업데이트되었습니다. 따라서의 주요 목적은 SecurityStamp모든 곳에서 로그 아웃 할 수 있도록하는 것입니다. 기본 아이디어는 암호와 같이 사용자의 보안 관련 사항이 변경 될 때마다 기존의 로그인 쿠키를 자동으로 무효화하는 것이 좋습니다. 따라서 암호 / 계정이 이미 손상된 경우 공격자는 더 이상 액세스 할 수 없습니다.

2.0.0에서 우리는 후크 다음과 같은 구성을 추가 OnValidateIdentity의 방법을 CookieMiddleware상기 볼 SecurityStamp이 변경 될 때와 쿠키를 거부합니다. 또한 refreshInterval스탬프가 변경되지 않은 경우 (역할 변경 등의 작업을 처리 할 때마다) 데이터베이스에서 사용자의 클레임을 자동으로 새로 고칩니다.

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 = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            validateInterval: TimeSpan.FromMinutes(30),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    }
});

앱에서이 동작을 명시 적으로 트리거하려면 다음을 호출하면됩니다.

UserManager.UpdateSecurityStampAsync(userId);

1
MVC4 테이블 구조에서 데이터를 마이그레이션하는 경우 어떻게합니까? 해당 입력란을 비워 둘 수 있습니까? 아니면 어떻게 든 일을 망칠 것입니까?
Dmytro Shevchenko

1
ID 또는 상수를 반환하여 효과적으로 no-op로 만들 수 있습니다. Null / ""도 작동합니다.
Hao Kung

2
UserManager.UpdateSecurityStampAsync (userId)가 UseOAuthBearerTokens에서 작동합니까?
Rikard

7
아니요, OAuthBearerToken은 현재 영향을받지 않습니다.
Hao Kung

3
현재 UseCookieAuthentication더 이상 사용되지 않습니다 . 사용하여 구성했습니다 services.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromSeconds(10));.
riezebosch

11

UseCookieAuthentication은 이제 더 이상 사용되지 않습니다 . 나는 그것을 사용하여 구성했다.

services.Configure<SecurityStampValidatorOptions>(o => 
    o.ValidationInterval = TimeSpan.FromSeconds(10));

응답 당 요청 에서 응답으로 이동했습니다 .


3
코어가 아닌 ASP.NET을 사용하는 경우이 기능이 작동합니까? 혼란 스러워요. 나는에 갈 경우 ASP를 식별 리포, 그것은 Asp.NET 코어에 대해 말할.
El Mac

5

토큰 확인에 SecurityStamp가 필요하다는 것을 알았습니다.

리포지토리 : 데이터베이스에서 SecurityStamp를 null로 설정 토큰 생성 (작동 확인) 토큰 확인 (실패)


그것은 버그 여야합니다. 확인할 수없는 토큰을 생성하는 것은 의미가 없습니다.
윌리엄 T. 청둥 오리

버그는 보안 스탬프가 비어있을 때 토큰을 생성 할 수 있다는 것입니다. (보안 스탬프가 없으면 imho GenerateEmailConfirmationToken이 실패해야합니다.이 답변 참조 : stackoverflow.com/a/29926407/1058214 )
mendel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.