Безопасность WCF - как разрешить всем посетителям этот URL - PullRequest
2 голосов
/ 01 февраля 2010

У меня есть служба 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>

1 Ответ

0 голосов
/ 02 февраля 2010

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

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

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

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

...