Безопасность WCF - как разрешить всем вызывающим абонентам этот URL-адрес?

У меня есть служба WCF, размещенная в среде службы Windows, которая отлично работает через http; через https я не могу получить доступ к одному URL-адресу, не видя приглашения для входа в Windows при запуске приложения Silverlight (или просто открывая страницу в IE). Я использую интерфейс IPolicyRetriever, чтобы убедиться, что файл ClientAccessPolicy.xml найден для приложения Silverlight. Это работает правильно.

У рассматриваемой службы определены две конечные точки:

<service behaviorConfiguration="defaultBehavior" name="WCFServices.Scheduler">
<endpoint address="WCFServices/Scheduler/" binding="wsHttpBinding" bindingConfiguration="dBinding" contract="WCFServices.IScheduler" />
<endpoint address="" binding="webHttpBinding" contract="WCFServices.IPolicyRetriever" behaviorConfiguration="PolicyBehavior" bindingConfiguration="dBinding" />
    <host>
      <baseAddresses>
        <add baseAddress="https://myservername.org/" />
      </baseAddresses>
    </host>
  </service>

Если я захожу на https://myservername.org/, я вижу интерфейс тестовой службы (со ссылкой на wsdl). Это предоставляет доступ к корневому экземпляру IPolicyRetriever, который приложение Silverlight использует для извлечения файла политики. Я могу загрузить этот и другие URL-адреса, предоставляющие доступ к службе WCF, без каких-либо запросов на вход. НО, если я перехожу к https://myservername.org/WCFServices/Scheduler/ в IE 8, меня встречает логин Windows. Если я сброшу настройки безопасности службы и клиента для использования http, я смогу перейти по последнему URL-адресу без запроса входа в систему, и приложение Silverlight будет работать, как и ожидалось. Я подозреваю, что это как-то связано с тем, что эта служба WCF является единственной с двумя определенными конечными точками (эта служба Windows содержит 5 других служб WCF, каждая из которых имеет только одну конечную точку). Я пропустил какие-то правила авторизации? Я не понимаю, как это может быть, потому что все остальные службы загружаются без подсказок.

Буду признателен за любую помощь. Мне нужно полное https://myservername.org/WCFServices/Scheduler/ для обслуживания службы WCF без запроса входа в систему. Спасибо, что нашли время, чтобы прочитать это.

Что касается безопасности, у меня есть только это как моя привязка:

<binding name="dBinding" maxBufferPoolSize="524288" maxReceivedMessageSize="6553600">
      <security mode="Transport">
      </security>
    </binding>

person TimDog    schedule 01.02.2010    source источник


Ответы (1)


Эта проблема была решена путем добавления этих строк в мою привязку безопасности:

<security mode="Transport">
   <transport clientCredentialType="None" proxyCredentialType="None"/>
</security>

... но это привело к множеству других проблем, с которыми мне удалось справиться благодаря ведению журнала WCF. Если вы столкнетесь с ошибкой NOT FOUND (400) при отладке службы WCF, не верьте этому. Включите отладку на стороне сервера и просмотрите сгенерированные файлы журналов — вы доберетесь до сути.

Я также должен отметить, что я обнаружил, что вторая конечная точка возвращает неверный запрос (400) при открытии в веб-браузере, и это ПО ДИЗАЙНУ. Первая конечная точка будет перечислять все дополнительные конечные точки в своем wsdl, и вы по-прежнему можете использовать любую из них в инструменте создания прокси. Не беспокойтесь, если вы получаете ошибку неправильного запроса при попытке доступа к ним непосредственно в браузере.

person TimDog    schedule 02.02.2010