[asp.net] ASP.NET Identity의 IUserSecurityStampStore <TUser> 인터페이스 란 무엇입니까?
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 SecurityStamp
는 Guid
키 포인트에서 새로 생성 된 것으로 나타납니다 UserManager
(예 : 비밀번호 변경).
Reflector 에서이 코드를 검사하기 때문에 실제로 이것을 넘어서는 해독 할 수 없습니다 . 거의 모든 기호 및 비동기 정보가 최적화되었습니다.
또한 Google은 그다지 도움이되지 않았습니다.
질문은 :
- 무엇
SecurityStamp
ASP.NET 정체성과 그것을 사용 무엇인가? SecurityStamp
인증 쿠키가 생성 될 때 어떤 역할을 합니까 ?- 이로 인해 필요한 보안 파급 효과 나 예방 조치가 있습니까? 예를 들어,이 값을 클라이언트로 다운 스트림하지 않습니까?
업데이트 (2014 년 9 월 16 일)
소스 코드는 다음과 같습니다.
답변
이는 사용자 자격 증명의 현재 스냅 샷을 나타냅니다. 따라서 아무것도 변경되지 않으면 스탬프는 동일하게 유지됩니다. 그러나 사용자의 비밀번호가 변경되거나 로그인이 제거되면 (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);
답변
UseCookieAuthentication은 이제 더 이상 사용되지 않습니다 . 나는 그것을 사용하여 구성했다.
services.Configure<SecurityStampValidatorOptions>(o =>
o.ValidationInterval = TimeSpan.FromSeconds(10));
응답 당 요청 에서 응답으로 이동했습니다 .
답변
토큰 확인에 SecurityStamp가 필요하다는 것을 알았습니다.
리포지토리 : 데이터베이스에서 SecurityStamp를 null로 설정 토큰 생성 (작동 확인) 토큰 확인 (실패)