2011-10-19 5 views
3

사용자 정의 ServiceAuthorizationManager를 사용하여 CheckAccess를 덮어 쓰고 URL의 일부인 사용자 정의 인증 토큰의 유효성을 검사합니다. 유효성을 검사 한 후에 GenericPrincipal로 Thread.CurrentPrincipal을 설정합니다. 하지만 요청이 마침내 내 서비스 메소드에 도달하면 Thread.CurrentPrincipal은 사라졌습니다. 이는 인증 관리자에서 설정 한 것이 아닙니다. 왜 잘못 되었나요?WCF 서비스 권한 부여 관리자가 Thread.CurrentPrincipal을 설정합니다.

답변

6

내가 서비스 인증 관리자를 등록 서비스 행동 principalPermissionMode = "없음"을 no로 설정하면이 문제를 가지고 :

상세한 소개는이 문서를 참조하십시오. 이것은 wcf 런타임에 현재 스레드에 주체를 넣지 않도록 지시해야합니다. "custom"로 설정하면 GenericPrincipal을 사용하여 설정 한 모든 principal을 겹쳐 씁니다.

+0

그럼 사용자가 언급 한 사용자 정의 인증을 어떻게 수행하고 있습니까? 'None'이라는 PrincipalPermissionMode를 사용하여이 작업을 수행 할 수 있습니까? –

+0

나는 로그인하는 동안 정식 티켓을 보내고 클라이언트는이를 추적하여 후속 서비스에서 사용합니다. authticket이 유효하지 않은 경우 ServiceAuthorizationManager 구현에서 false를 반환합니다. 그것이 유효하다면 나는 currrent 스레드에 일반 원칙을 설정합니다. principalPermissionMode를 None으로 설정하지 않으면 방금 설정 한 제네릭 보안 주체가 줄 바꿈 어딘가에 덮어 씁니다. – sash

1

기본 제공 메커니즘을 사용 권한으로 사용하지 않으려면 WCF는 WCF 파이프 라인에 IAuthorizationPolicy가 제대로 통합되도록 현재 주체를 식별해야합니다. 'Custom'의 PrincipalPermissionMode를 지정해야합니다. Authorization In WCF-Based Services