2013-03-15 1 views
1

이 주제를 검색하여 혼란스러워지고 있습니다..Net 4.5 사용자 정의 클레임이 다시 작성되지 않았습니다.

우리는 양식 인증 웹 응용 프로그램을 보유하고 있습니다. 이전 FormsAuthentication.SetCookie 문을 변경하여 FormsIdentity가 포함 된 GenericPrincipal을 만든 다음 사용자 지정 클레임을 몇 개 추가 한 다음 SessionAuthenticationModule을 사용하여 sessionsecuritytokentocookie를 작성합니다. FederatedAuthentication과 약간 혼란스러워지고 있습니다. FederatedAuthentication.SessionAuthenticationModule을 사용하여 토큰을 작성하고 있지만 이것이 제 경우에 모듈 ("SessionAuthenticationModule")을 사용하는 것과 같다고 생각합니까?

어쨌든 인증은 정상적으로 작동하지만 내 사용자 지정 클레임이 다시 만들어지지 않습니다. 회원 공급자 또는 역할 제공 업체를 사용하지 않고 있습니다.

나는 SessionAuthenticationModules, ClaimsAuthenticationManagers, ClaimsTransformationModules에 대해 읽었으나 더 이상 이들 중 어느 것을 사용해야하는지, 어떻게 사용했는지 더 이상 확신하지 못합니까? 현재 나는 이전 로그인 코드가 어디에 있었는지 (전체 로그인 프로세스를 다시 작성할 시간이 없다) 클레임을 추가하고 각 요청에 대해 이러한 클레임이 자동으로 다시 생성되기를 기대하고있었습니다.

내가해야 할 일은 무엇입니까? 분명히 데이터베이스를 재구성 할 때마다 데이터베이스로 이동하고 싶지 않습니다. 쿠키를 저장하고 자동으로 다시 작성했다고 생각했습니다.

답변

0

사용자 지정 ClaimsAuthenticationManager가 필요합니다. 한 번 호출되어 클레임이 추가됩니다. 응용 프로그램에서이 사용자 정의 클래스를 등록하는 것을 잊지 마세요 :

public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal) 
    { 
     //works only with one default identity 
     //In contra to a a default implementation modify incomingPrincipal by adding claims) 
     if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true) 
     { 
      ClaimsIdentity claimsIdentity = incomingPrincipal.Identity as ClaimsIdentity; 
      if (claimsIdentity != null) 
      { 
       IEnumerable<Claim> claims = new Claim[] { }; 
       claims = claims.Concat(CreateIdsClaims(incomingPrincipal.Identity.Name)); 
       claims = claims.Concat<Claim>(CreateRoleClaims(GetRolesByName(incomingPrincipal.Identity.Name))); 
       claimsIdentity.AddClaims(claims); 
      } 

      return incomingPrincipal; 
     } 

     return null; 
    } 
+0

"한 번 호출"이라고 말하면 요청 당 한 번? 따라서 각 요청은 클레임을 다시 작성해야합니까? 내 보안 토큰이 이러한 클레임을 쿠키에 저장하지 않는 이유는 무엇입니까? 그래서 각 요청마다 다시 작성하지 않아도됩니다. 물론 서버 캐시를 사용할 수는 있지만 클라이언트의 쿠키에 이러한 캐시가 캐시 될 것이라고 생각했습니다. – user2047485

+0

또한이 ClaimsAuthenticationManager를 작동 시키려고 시도했지만 실행하지 못했습니다. 제가 를 사용하여 Web.config에 등록한 하지만 실행되지 않습니다. – user2047485

1

귀하의 접근 방식은 괜찮 - 당신은 당신이 필요로하는 모든 주장과 ClaimsPrincipal을 생성하고 세션 쿠키를 작성합니다. 클레임 인증 관리자가 필요 없습니다.

수 개는 :

  • 당신이 ClaimsIdentity를 생성하는 인증 유형 설정 확인 - 그렇지 않으면 클라이언트가 기본 세션 쿠키에 의한
  • 는 SSL을 필요로 인증 할 수없는 것 (브라우저가 쿠키를 재전송하지 않습니다 일반 텍스트 이상). 변경할 수는 있지만 권장하지는 않습니다.