2010-05-05 3 views
4

Я обращаюсь к третьей стороне службы WCF (у меня нет доступа к конфигурации службы). Мы используем SSL-сертификаты для аутентификации.Ошибка аутентификации WCF

Я получаю эту ошибку при попытке получить доступ к любому из предусмотренных методов

запрос HTTP является несанкционированным со схемой аутентификации клиента Обсуди. Заголовок аутентификации, полученный от сервера был «Negotiate, NTLM

Я проверил много Google ссылки и не повезло так далеко не знаю, что еще проверить на моей стороне.

EDIT

Вот конфигурация

<system.serviceModel> 
     <bindings> 
      <wsHttpBinding> 
       <binding name="wsHttpBinding" closeTimeout="00:01:00" openTimeout="00:01:00" 
        receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" 
        transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
        allowCookies="false"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <reliableSession ordered="true" inactivityTimeout="00:10:00" 
         enabled="false" /> 
        <security mode="Transport"> 
         <transport clientCredentialType="Windows" proxyCredentialType="None" 
          realm="" /> 
         <message clientCredentialType="Windows" negotiateServiceCredential="true" 
          establishSecurityContext="true" /> 
        </security> 
       </binding> 
      </wsHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="https://url" 
       binding="wsHttpBinding" bindingConfiguration="wsHttpBinding" 
       contract="IApiWS" name="wsHttpBinding"> 
      </endpoint> 
     </client> 
</system.serviceModel>
+0

Вы могли бы показать код, с которым вы пытаетесь получить доступ к службе, похоже, что он запрашивает аутентификацию NTLM. – Pharabus

+0

@Pharabus: Что вы хотите, чтобы я вставлял? Конфигурация клиента или некоторый код C#? Я бы сказал, что мой код для доступа к веб-сервису не имеет значения. Мне нечего показать. Просто вызывая метод класса :-(Нет настроек безопасности – StackOverflower

+0

, вам понадобятся некоторые параметры безопасности для прохождения через аутентификацию, запрашиваемую службой WCF. – Pharabus

ответ

1

Хорошо, это может быть немного расплывчатым, так что я aplogise заранее, по существу, сервер говорит вам, что вы не имеете права, как правило, для этого вы добавили бы что-то вроде ниже на прокси-сервер, который вы создали

svc.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; 

, где svc - ваш сгенерированный прокси. Я также видел это на неверно сконфигурированной конечной точке IIS, где виртуальная папка не разрешает анонимный набор (хотя вы говорите, что не можете получить доступ к конфигурации службы, чтобы это не помогло). надеюсь, что это помогает

редактировать добавил больше информации,

Это может быть, в зависимости от безопасности, что настройка аналогична ниже, может быть более полезным

svc.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Anonymous; 

Edit 2 Конфигурационный выше показывает, что wsHttpBinding, которое вы используете, имеет Windows, установленную как clientCredentialtype для безопасности транспорта и аутентификации пользователей, это означает, что вы будете отправлять через учетные данные текущего пользователя в службу аутентификации с использованием NTLM (поскольку negotiateServiceCredentials - это правда), вы подтвердили, что пользователь, вошедший в систему, имеет ri ghts на сервисе?

+0

@Pharabus: Спасибо, но не повезло. При втором настройке я получаю «Уровень проверки TokenImpersonationLevel.Anonymous не поддерживается для аутентификации». Первый не имел никакого значения. Пожалуйста, примите во внимание, что я использую SSL-сертификаты для аутентификации. – StackOverflower

+0

@Timmy O'Tool. да, я видел SSL, но я не уверен, что это проблема здесь, однако очень сложно без конкретной информации повторить, какую аутентификацию ожидает сервер и как настроен клиент. – Pharabus

2

Попробуйте установить ваш clientCredentialType="Windows" в clientCredentialType="Certificate" я обычно использую жесткий кодированный WCF конфигурации, а не конфигурационный файл, так что я не совсем уверен в этом, но в любом случае, обратите внимание на следующую ссылку: Selecting a Credential Type на MSDN.

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

+1

+1 Спасибо за вашу помощь, но я уже проверил ваше предложение (на этом этапе я должен дважды проверить, так как я проверил МНОГИЕ вещи). Я создал прокси-сервер, используя svcutil.exe. Этот инструмент генерирует конфигурацию (теоретически), которую нужно вставить в web.config. Но в этом случае сгенерированная конфигурация не кажется точной. – StackOverflower

+0

'svcutil.exe' не выполняет 100% задания. Не все, что нужно знать клиентскому приложению, обеспечивается метаданными службы, поэтому вам часто приходится настраивать конфигурацию клиентской стороны вручную. –

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