2012-03-05 3 views
3

내 asp.net 웹 응용 프로그램을 탐색하는 사용자의 자격 증명을 EWS FindAppointments 호출에 전달할 수 있습니까?HostingEnvironment.Impersonate 자격 증명을 ExchangeService EWS에 전달하는 방법은 무엇입니까?

자신의 캘린더를 읽을 수있는 권한이있는 액티브 브라우징 사용자의 일정 세부 정보 만 반환하려고하므로 문제는 EWS API가 포함 된 Exchange 가장으로 연결되지 않아야합니다 discussed here.

아래 코드는 Windows 인증 및 ID 가장이 구성되어 있어도 로컬 호스트를 실행하지만 웹 서버에서 실행 중일 때 제대로 작동합니다. 액세스 거부 오류가 발생합니다.

using (HostingEnvironment.Impersonate()) 
    { 
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 

    service.UseDefaultCredentials = true; 
    service.AutodiscoverUrl(UserEmailAddress); 

    Mailbox mb = new Mailbox(UserEmailAddress); 
    FolderId cfCalendarFolderID = new FolderId(WellKnownFolderName.Calendar, mb); 
    CalendarView cvCalendarView = new CalendarView(DateTime.Now, DateTime.Now.AddDays(30), 1000); 
    cvCalendarView.MaxItemsReturned = 3; 

아마도 내 ExchangeService 객체에 HostingEnvironment 자격 증명을 전달하는 간단한 방법을 누락?

service.UseDefaultCredentials이 무엇인지 확인하는 방법이 있습니까?

Windows 인증 된 가장 된 사용자로부터 암호를 가져 오는 방법이 없으므로 다음을 사용할 수 없습니다.

service.Credentials = new System.Net.NetworkCredential(username, password, domain); 

나는 또한 다음을 시도했지만 동일한 ServiceResponseException 액세스가 errot를 거부합니다.

service.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; 
service.PreAuthenticate = true; 

미리 도움을 주셔서 감사합니다. 또는 관련없는 수

추가 정보 : 웹 사이트에 대한

  • 응용 프로그램 풀 ID는 NetworkService입니다.
  • UserEmailAddress 변수가 내가 위에서 할 싶은 무엇을 달성하기 위해 System.Security.Principal.WindowsIdentity.GetCurrent().Name

편집 (2012 8월 14일) 를 기반으로 AD 조회에서 설정되어, 나는 HostingEnvironment.Impersonate이 필요하지 않을 생각합니다. 대신 ExchangeServiceImpersonatedUserId 속성을 사용해야합니다. 해당 내용에 대한 자세한 내용 here 서비스 계정이 .Credentials 매개 변수에 전달할 모든 사용자를 가장 할 수 있도록 Exchange 2007을 실행하고 있지만 power shell command 만 Exchange 2010과 호환 될 수 있습니다.

답변

0

NetworkCredential 대신 WebCredentials을 사용해야합니다 (related SO post 참조). 이

+1

당신에게 @SilverNinja 감사 EWS와 문제 및 AutoDiscover + NetworkCredentials 것 같다,하지만 난 스와핑 두려워'service.UseDefaultCredentials 사실 =;''service.Credentials = 새로운 WebCredentials()에 대한, '여전히 반환 같은 오류. 게시 된 웹 사이트에 Visual Studio 디버거를 연결하고 자격 증명을 상호주고받을 수 있는지 확인하려고합니다. – RichardD