2011-10-11 6 views
1

조직에서 EWS Managed API를 사용하여 Exchange 2010의 사용자 지정 UI 클라이언트에서 사서함에 액세스하려고합니다. 우리는 IIS 7.5에서 실행되는 .NET 4.0 WCF 서비스를 EWS 메서드 UI 클라이언트를 대신하여 클라이언트와 WCF 서비스는 https를 통해 통신하므로 WCF 서비스와 EWS도 통신합니다. 이제 서비스 계정 (기본적으로 특정 전자 메일받은 편지함에 가장이있는 AD 계정)을 만들고이 서비스 계정에서 WCF 서비스를 실행하려고합니다. 그러나 IIS의 특정 AD 사용자 (익명 인증을 특정 AD 사용자로 설정하여 사용할 수있는 익명 인증)에서 WCF 서비스를 실행하면 EWS는 401 Unauthorized 예외를 발생시킵니다. ExchangeService 개체를 검사하면 Credentials 개체가 null입니다. 자격 증명을 하드 코드하면 서비스에서 EWS에 액세스 할 수 있습니다. 아래는 ExchangeService 객체를 생성 할 때 사용하는 코드입니다. EWS - 가장 용 서비스 계정 사용

var service = new ExchangeService(ExchangeVersion.Exchange2010) 
{ 
    Url = new Uri(ConfigurationManager.AppSettings["EWSUrl"]), 
    // If I uncomment the below line, the service can access EWS. However, I want the user under which the service is running to access EWS. 
    //Credentials = new NetworkCredential("ImpersonatingUser", "secretPwd", "TESTDOMAIN"), 
    ImpersonatedUserId = new ImpersonatedUserId { Id = emailAddress, IdType = ConnectingIdType.SmtpAddress }, 
}; 

은 내가 System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity 객체가 서비스가 실행되고있는 현재 사용자있을 ​​것이라는 점을 어딘가에 읽었다. 그러나 System.ServiceModel.ServiceSecurityContext.Current 컨텍스트는 내 경우 null입니다.

서비스 계정의 자격 증명을 코드에서 하드 코딩하지 않고 어떻게 가져오고 EWS로 전달합니까? 자세한 내용이 필요하면 알려주십시오.

편집 : IIS 7.5에서 가장 된 AD 사용자 ID로 실행되는 별도의 응용 프로그램 풀을 만들고이 응용 프로그램 풀에서 실행되도록 내 WCF 서비스를 구성했습니다. 여전히 서비스 자격 증명을 가져올 수 없습니다.

미리 감사드립니다.

답변

1

WebService가 Exchange 상자에서 실행되지 않는 한 Kerberos를 구성해야합니다. NTLM은 자격 증명 위임을 허용하지 않습니다.

또 다른 옵션은 SSL로 보안 된 기본 인증으로 전환하는 것입니다. 그러나 이것은 클라이언트 애플리케이션에서 싱글 사인 아웃을 풀어 버리는 것을 의미합니다.