2010-05-26 1 views
3

세 웹 서비스가 모두 동일한 서버에 있습니다.WCF 웹 서비스 - 동일한 서버에서 다중 홉 위장

내 클라이언트는 서비스 B를 호출하기 위해 클라이언트를 가장하는 서비스 A를 호출하며 모두 정상입니다.

이제 서비스 C를 호출하기 위해 서비스 B (사용자 이름) 호출자를 가장하고 싶습니다. 이전과 동일한 기술 (AllowedImpersonationLevel = Impersonate, user.Impersonate())을 사용하면 사용자가 대신 서비스 C는 사용자를 IIS (표준 NETWORK SERVICE 계정이 아닌 UPN)에서 실행중인 사용자로 봅니다.

이 기능을 사용하려면 특별한 조치가 있습니까? 위임 문제입니까? (그들은 모두 동일한 서버에 있기 때문에 위임하지 않을 것이라고 생각했습니다)

감사합니다!

답변

0

이 시나리오에서는 위임이 필요합니다. 필요한 구성에 ImpersonationLevel.Delegation (구성 또는 코드로 설정)이 있습니다. codeplex에 대한 WCF Security Guidance를 살펴 보시면 매우 좋은 소식입니다. 특히 프로덕션 환경에서 구성 파일의 올바른 옵션을 선택하는 것 이상의 위임을 달성하는 데주의하십시오. 연결하려는 애플리케이션 (예 : SQL 서버가 위임 용으로 구성되어 있고 서비스 기본 이름 (SPN)과 같은 활성 디렉터리 등에서 특정 인프라 요구 사항이 충족되는지 확인합니다.

0

당신은 당신의 서비스 클래스에서 Web.cofig

<system.web> 
    <identity impersonate="true"/> 
    <authentication mode="Windows"/> 
</system.web> 
<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

에서 C

서비스에 ASP.Net 호환성 켜기 시도 할 수 있습니다

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class Service : IService 
{ 
    public string ExecuteRequest(string xmlRequest) 
    { 
     IRequestManager requestManager = new RequestManager(); 
     return requestManager.ProcessRequest(xmlRequest); 
    } 

} 
0

나는 사용해야 할 것으로 예상했을 것이다 위임은 프로세스 경계를 ​​두 번 건너므로 TokenImpersonationLevel.Delegation을 시도해 보셨습니까?