Можно ли использовать встроенную проверку подлинности Windows вне браузера? - PullRequest
2 голосов
/ 06 мая 2011

У меня есть служба WCF, которая используется двумя клиентами:

  1. Клиент Silverlight;это отлично работает с IWA.
  2. Настольное приложение

Я хочу использовать IWA в настольном приложении, но возможно ли это?Я получаю сообщение об ошибке HTTP, в котором говорится, что я передаю Anonymous, когда он хочет согласовать или NTLM.Звучит довольно очевидно, но как я могу это исправить?

Ответы [ 3 ]

4 голосов
/ 06 мая 2011

Вы можете сделать это. Оказывается, вам нужно по существу смешать файлы конфигурации web.config и client в файл app.config вашего настольного приложения.

Так что вам нужно добавить строки web.config:

<system.web>
    <authentication mode="Windows"/>
  </system.web>

и

<bindings>
      <basicHttpBinding>
        <binding name="winAuthenticationBinding">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" proxyCredentialType="Windows"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>

(очевидно, находится внутри тега <system.serviceModel>.

А затем используйте эту привязку с конечной точкой клиента, которую вы обычно вставляете в файл конфигурации клиента.

0 голосов
/ 06 мая 2011

Когда ваше настольное приложение запускается, первое, что вы должны сделать в Program.cs, это:

System.Threading.Thread.CurrentPrincipal = new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent());

По умолчанию CurrentPrincipal - это GenericPrincipal, который не аутентифицирован. Кроме того, помните, что вам нужно выполнять этот код в любых потоках, которые вы раскручиваете.

Вам также необходимо настроить Wcf так, чтобы он подключался к вашей службе, вероятно, аналогично тому, как вы настроили его для Silverlight.

0 голосов
/ 06 мая 2011

Хотя здесь не так много, чтобы помочь в диагностике проблемы, я бы посоветовал вам просмотреть этот ресурс и посмотреть, чего не хватает в вашем настольном приложении: http://msdn.microsoft.com/en-us/library/bb629363.aspx

Это мое предположениечто поскольку ваше приложение Silverlight работает на стороне сервера, проблема заключается в передаче вашей аутентификации по сети, а не только внутри сети сервера.Другая возможность состоит в том, что у вас есть настраиваемая конфигурация для приложения Silverlight, которую вы не перенесли для настольного приложения.Например, вы можете изменить механизм аутентификации внутри файла конфигурации со стандартного, который поставляется с WSDL, на что-то другое.Может быть, это то, что разработчик приложений Silverlight сделал, и вам просто нужно подражать.

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