2013-08-02 3 views
4

Я аутентифицирую пользователя на службе WCF через IIS7 с использованием проверки подлинности Windows и олицетворения ASP.NET.Как олицетворять пользователя для службы WCF?

При отладке локально я могу видеть System.Security.Principal.WindowsIdentity.GetCurrent(). Имя как равное моим учетным данным Windows. Когда я развертываю эту службу на сервере, WCF не запускается, если не включена анонимная аутентификация.

Итак, как мы получаем это WCF сервиса для работы на сервере с Anonymous Authentication отключены?

UPDATE 1: Сообщение об ошибке после попытки оба предложения:

схемы аутентификации, настроенных на хосте ('IntegratedWindowsAuthentication') не позволяют, сконфигурированные на связывание 'WebHttpBinding' ('Anonymous «). Убедитесь, что для параметра SecurityMode установлено значение Transport или TransportCredentialOnly. Кроме того, это может быть решена путем изменения на проверку подлинности схемы для этого приложения с помощью инструмента управления IIS, через свойство ServiceHost.Authentication.AuthenticationSchemes, в конфигурационном файле приложения на элемента, обновив свойство ClientCredentialType на binding, или путем настройки свойства AuthenticationScheme на HttpTransportBindingElement.

UPDATE 2: Аутентификация была установлена ​​следующим образом:

пула приложений:

  • идентичности = NetworkService

Веб-сайт:

  • Anonymous Authentication = отключено
  • ASP.NET Authentication = включено
  • проверка подлинности Windows = включено

WCF Применение:

  • анонимной проверки подлинности = отключено
  • ASP.NET Authentication = включено
  • Аутентификация Windows = включена

ответ

3

Это обычная проблема.Вы должны установить режим безопасности и соответствующий транспортный элемент - Если вы используете BasicHttpBinding - поместить следующий текст в конфигурации

<basicHttpBinding> 
    <binding> 
    <security mode="TransportCredentialOnly"> 
    <transport clientCredentialType="Windows" /> 
    </security> 
    </binding> 
</basicHttpBinding> 

прочитанных следующие должности - http://blogs.msdn.com/b/drnick/archive/2007/03/23/preventing-anonymous-access.aspx http://blogs.msdn.com/b/wenlong/archive/2006/05/18/600603.aspx

+0

спасибо. Однако нам нужно использовать webHttpBinding, а не basicHttpBinding, чтобы мы могли определять поведение по умолчанию для службы. Пожалуйста, посмотрите на вопрос, чтобы увидеть сообщение об ошибке, которое мы сейчас получаем. – aleafonso

1

Одна из причин для ошибки что вам нужно включить делегирование kerberos на сервере, на котором размещен ASP.net. это позволяет токенам, прошедшим аутентификацию Windows, распространяться на сервер хостинга службы WCF.

Вы посмотрите на следующую ссылку

Impersonation and Delegation in WCF

HTH

Рауты

+0

Большое спасибо за предложение. Мы включили сервер для делегирования в AD и протестировали. К сожалению, служба по-прежнему не работает с отключенной анонимной аутентификацией и включенным олицетворением ASP.NET. Отображаемое сообщение об ошибке остается таким же, как и раньше. Любые другие идеи? – aleafonso

+0

Какая аутентификация включена в службе WCF и приложении ASP.Net? Я думаю, что если у вас есть как аутентификация Windows, она должна работать. – rauts

+0

Пожалуйста, взгляните на вопрос. Я только что обновил его со всеми значениями аутентификации, которые используются. Большое спасибо – aleafonso

0

Если бы такой же вопрос. Со мной это произошло потому, что для IIS для приложения не была включена проверка подлинности Windows.

  1. Открыть IIS
  2. Выберите веб-приложение
  3. значок Нажмите Authentication (IIS)
  4. Включить окна аутентификации
Смежные вопросы