2013-03-13 1 views
2

У меня есть служба WCF, работающая на IIS7, которая открыта с использованием конечной точки netTcp и настроена с использованием проверки подлинности Windows (Transport и clientCredentialType="Windows"), и все это работает нормально.Передача NetworkCredential через службу WCF для использования с API EWS

В службе я использую API EWS для отправки электронной почты и проверки входящих ящиков на сервере Exchange. У меня это частично работает, поскольку на данный момент в разработке я вручную задал свойство Credentials, создав объект NetworkCredential для передачи.

Что я хочу сделать, это использовать идентификацию пользователя сервис, чтобы я мог отправлять почту в виде их и перебирать через свой почтовый ящик.

я могу получить доступ к призывающей информации о пользователях с помощью

ServiceSecurityContext.Current.PrimaryIdentity 

но это возвращает IIdentity объекта, а не учетные данные мне нужно, чтобы создать соединение с сервером Exchange.

Я не могу создать объект NetworkCredential без пароля, которого у меня нет, и из того, что я вижу, я не могу создать NetworkCredential из объекта IIdentity.

Должен быть способ достижения этого. Все предложения приветствуются.

ответ

3

насчет

using(ServiceSecurityContext.Current.WindowsIdentity.Impersonate()) 
{ 
    ExchangeService service = new ExchangeService(...) 
    service.UseDefaultCredentials = true; 

} 

Клиент, который вызывает ваш сервер должен разрешать делегирование:

proxy.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation; 

Если сервер WCF работает, используя учетную запись LocalSystem или NetworkService, вам также нужно включить «Доверенные для делегирование "для вашей учетной записи компьютера в AD (обычно это задание сетевого администратора). Если он запускается с использованием учетной записи пользователя другого домена, вам необходимо включить свойство «Доверенные для делегирования» для этой учетной записи и создать имя участника сервера (SPN) для вашего сервера. Честно говоря, я никогда не делал этого сам, потому что предпочитаю использовать учетную запись NetworkService. Ее проделала несколько ссылок: Here, here, and here

+0

Отличная идея, и я надеялся, но это бросает исключение: 'тип инициализатора для«Microsoft.Exchange.WebServices.Data.ExchangeServiceBase»бросил exception.' –

+0

Какое исключение? Может быть, вам нужно настроить делегацию, чтобы она работала? – Slava

+0

Если ваш удаленный клиент подключается к вашему серверу, а ваш сервер вызывает сервер Exchange (на удаленном компьютере), делегирование необходимо настроить для вашего сервера. – Slava

 Смежные вопросы

  • Нет связанных вопросов^_^