2012-09-11 3 views
0

상향식 BizTalk 2010 프로젝트에서 클라이언트가 데이터를 전송하기 위해 호출하는 웹 서비스와 클라이언트가 데이터를 요청하기 위해 호출하는 웹 서비스가 제공됩니다. biztalk 응용 프로그램 수준에서 wcf 서비스로 오케스트레이션을 노출하면이 작업이 수행됩니다.BizTalk : 호출자 식별 인증

서버 수준에서 우리는 2 노드 웹 팜, 2 노드 biztalk 그룹 및 sql 클러스터를 갖게됩니다. 웹 서비스는 분명히 웹 팜에 배포되며 오케스트레이션을 통해 BizTalk 그룹 서버에서 송수신 포트가 실행됩니다.

호출자를 인증하고 해당 ID를 활성 디렉터리 계정에 매핑하여 오케스트레이션 수준에서 호출자의 AD ID에 액세스 할 수 있도록하고 계정 이름을에있는 저장 프로 시저로 전달하려고합니다. 데이터베이스.

아마도 우리는 SSL 인증서를 통해 신원 매핑을 처리 할 수 ​​있었지만 이전에 그렇게하지 않았습니다. 거기에 좋은 샘플/튜토리얼이 있습니까?

+0

클레임 기반 ID를 사용하기 위해 Windows Identity Framework를 활용할 것입니다. BizTalk를 통해이 작업을 해본 적이 없지만 AD 수준에서 ID를 처리하는 것은 BizTalk의 강력한 방법이 아닙니다. –

답변

0

끝점 동작을 추가하여 WindowsIdentity의 이름을 WCF 헤더에 추가하면 어떨까요? 그런 식으로 (최소한 제 상황에서는) 신원을 파이프 라인을 통해 쉽게 얻을 수 있지만 "계정 이름"용도로 충분합니다. 클라이언트 인증서를 사용하지만,는 BizTalk 파티 이름을 얻기 위해 대신 WindowsIdentityPrimaryIdentity을 사용하는 경우

#region IDispatchMessageInspector Members 

public object AfterReceiveRequest(
    ref System.ServiceModel.Channels.Message request, 
    System.ServiceModel.IClientChannel channel, 
    System.ServiceModel.InstanceContext instanceContext) 
{ 
    if (ServiceSecurityContext.Current == null || 
     ServiceSecurityContext.Current.WindowsIdentity == null) 
     return null; 

    WindowsUserName windowsUserName = new WindowsUserName(); 
    request.Headers.Add(MessageHeader.CreateHeader(
     windowsUserName.Name, windowsUserName.Namespace, 
     ServiceSecurityContext.Current.WindowsIdentity.Name)); 
    return null; 
} 

public void BeforeSendReply(ref Message reply, object correlationState) 
{ 
    return; 
} 

#endregion 

같은 실제로 적용됩니다. 이것은 활성 디렉토리 계정과 직접적인 관련이 없습니다.