VS 2012/.NET 4.5/ASP.NET MVC 4 응용 프로그램에서 ClaimsIdentity
에서 파생 된 사용자 지정 ID 유형이 있습니다. 그것은 단지 편의를 위해 일부 주장에서 값을 읽을 기본 클래스에 몇 가지 읽기 전용 속성 추가 : 나는 위의 정체성을 감싸는 주에 들어오는 주체를 변환 ClaimsAuthenticationManager
사용자 정의에서잘못된 유형의 ClaimsIdentity 작업자 프로세스 리사이클 후 세션 쿠키에서 읽음
public class AppIdentity : ClaimsIdentity
{
public AppIdentity(IEnumerable<Claim> claims) : base(claims, "Custom")
public string CustomProp { get { return FindFirst("CustomClaim").Value; } }
// etc.
}
을, 이것에 대한 토큰을 생성 원금과 쿠키에 토큰을 쓰기 :
var claims = new List<Claim>
{
new Claim("CustomClaim", "CustomValue"),
// etc.
};
var newPrincipal = new ClaimsPrincipal(new AppIdentity(claims));
var sessionToken = new SessionToken(newPrincipal, TimeSpan,FromHours(24));
FederatedAuthentication.SessionAuthenticationModule
.WriteSessionTokenToCookie(sessionToken);
내가 지금 같은 컨트롤러 액션의 후속 요청에 대한 신원을 가져 오는 경우 ...
var identity = ClaimsPrincipal.Current.Identity;
... 때로는 identity
의 런타임 유형이 AppIdentity
이고 경우에 따라 기본 형식이 ClaimsIdentity
인 경우가 있습니다. 내 사용자 정의 클레임은 항상 Claims
컬렉션 identity
안에 있습니다.
작업자 프로세스가 재활용 될 때 ID가 "012"를 잃는 것처럼 보입니다. 지금은이 프로젝트에서 IIS Express 개발 서버만을 사용하고 있으며, 예를 들어 web.config에서 약간의 변경을 가하면이 동작을 강제로 수행 할 수 있습니다. 그런 다음 ID는 항상 ClaimsIdentity
이고 AppIdentity
이 아닌 유형입니다.
질문 : 사용자 지정 클레임 ID 유형을 쿠키에 잘못 저장했거나 지원되지 않을 수도 있습니다. 세션 쿠키는 파생 된 ClaimsIdentity
의 형식 정보를 저장합니다 (쿠키에서 올바른 ID 유형을 구체화하는 데 필요한 것일 수 있습니다).
고마워요! 유도 된 신원을 제거하고 확장 방법 접근법을 채택했습니다. – Slauma
우리는 어디 까지나 최소한의 힘든 노력없이 ...?!?! – EvilDr