Запрос на токен безопасности не может быть удовлетворен из-за сбоя аутентификации

У меня есть служба WCF, размещенная в общей среде (мы арендуем пространство у компании, предоставляющей веб-хостинг, но у нас есть выделенный пул приложений), и я получил веб-приложение asp.net, которое вызывает службу wcf. Оба проекта являются проектами .NET 4.

Если я запускаю свое веб-приложение из VS2010, я могу легко выполнять вызовы wcf. Однако у меня будут исключения, если я опубликую веб-сайт в этой общей среде и сделаю оттуда вызовы wcf.

Детали исключения:

[FaultException: запрос маркера безопасности не может быть удовлетворен из-за сбоя проверки подлинности.] System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault (сообщение сообщения, цель EndpointAddress) +5499790 System.ServiceModel.Security.SspiNegotiationTokenProviderovider.GetNextOutputationTokenProviderovider.GetNextOthers ) +49

[SecurityNegotiationException: вызывающая сторона не была аутентифицирована службой.] System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) +9464367 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke type (ms ) +345

Я также публикую сайт на своей локальной машине, он тоже работает.

Вот моя конфигурация на стороне сервера:

<wsHttpBinding>
            <binding name="wsHttpBinding" closeTimeout="00:01:00"
                     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                     transactionFlow="false"
                     hostNameComparisonMode="StrongWildcard"
                     maxBufferPoolSize="2147483647"
                     maxReceivedMessageSize="2147483647">
               <readerQuotas maxDepth="2147483647"
                                          maxStringContentLength="2147483647"
                                          maxArrayLength="2147483647"
                                          maxBytesPerRead="2147483647"
                                          maxNameTableCharCount="2147483647" />
            </binding>
        </wsHttpBinding>

Код на стороне клиента:

 factory.Credentials.Windows.Username = "user";
 factory.Credentials.Windows.Password = "psw";
 factory = new ChannelFactory<IService>(binding, serviceAddress);
 factory.Open();
 service = factory.CreateChannel();

Я хочу использовать wsHttpBinding вместо basicHttpBinding, и мне нужна некоторая безопасность, поэтому я не хочу устанавливать для режима безопасности значение None.

Версия IIS - 7 в Windows 2008 R2, и в ней разрешена анонимная проверка подлинности. Выдача себя за другое лицо на Asp.net отключена.

Я не думаю, что в этих настройках что-то не так, потому что они работают, если я запускаю проект веб-сайта из VS2010.

Спасибо за любую помощь.

Сяосу


wcf
person Xiaosu    schedule 24.01.2011    source источник
comment
Режим безопасности с обеих сторон: ‹режим безопасности = Сообщение› ‹сообщение clientCredentialType = WindowsgotiateServiceCredential = true algorithmSuite = По умолчанию installSecurityContext = true /› ‹транспортный clientCredentialType = Windows proxyCredentialType = None realm = /› ‹/security›   -  person Xiaosu    schedule 25.01.2011


Ответы (1)


Учетные данные клиента Windows поддерживаются только в том случае, если и клиент, и сервер (то есть веб-сайт и служба) находятся в одном домене Windows или на одном компьютере. Согласование SSPI или согласование Kerberos не работает между ненадежными компьютерами / доменами.

person Ladislav Mrnka    schedule 26.01.2011