Запрос на токен безопасности не может быть выполнен, потому что аутентификация не удалась - PullRequest
1 голос
/ 24 января 2011

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

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

Сведения об исключении:

[FaultException: запрос на токен безопасности не может быть выполнен из-за сбоя аутентификации.] System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault (сообщение-сообщение, цель EndpointAddress) +5499790 System.ServiceModel.Security.SspiNegotiationTokenProvider.GetNextOutgoingMessageBody (Сообщение входящих сообщений, SspiNegotiationTokenProviderState sspiState) + 49

[SecurityNegotiationException: вызывающая сторона не была аутентифицирована службой.] System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) +9464367 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, тип Int32) + 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.

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

Xiaosu

1 Ответ

3 голосов
/ 27 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...