Как указать прокси-классу WCF-клиента использовать проверку подлинности Windows и WindowsPrincipal уже вошедшего в систему пользователя домена в качестве учетных данных? - PullRequest
3 голосов
/ 02 июля 2010

У меня есть клиент Windows WPF, который вызывает веб-сервис WCF.Пользователь уже вошел в домен Windows перед запуском приложения, а служба WCF использует проверку подлинности Windows.

Я хочу, чтобы клиент WPF использовал WindowsPrincipal уже вошедшего в систему пользователя при вызове службы WCF.Я НЕ хочу создавать новый экземпляр NetworkCredential с EXPLICIT именем пользователя и паролем, чтобы сделать это, просто потому, что попросить пользователя войти в систему дважды (в Windows и в приложении) ... это довольно недружелюбно.

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

serviceClientProxy.ClientCredentials.Windows.ClientCredential
= new NetworkCredential("username", "password", "domain");

Вместо этого я хотел бы сделать что-то вроде этого

serviceClientProxy.ClientCredentials.Windows.AllowedImpersonationLevel
    = TokenImpersonationLevel.Identification;
serviceClientProxy.ClientCredentials.Windows.ClientCredential
    = { /* network credential for already logged in user */ }

То есть я хочу NetworkCredential для уже существующего (и работающего)

new WindowsPrincipal(WindowsIdentity.GetCurrent())

Кто-нибудь знает, как это сделать?Я пытался установить security mode = "" и транспорт clientCredentialType = "" в app.config, но пока безрезультатно.

Ответы [ 2 ]

0 голосов
/ 07 июля 2010

В вашем app.config:

  • Добавить:

    <system.net>
      <defaultProxy useDefaultCredentials="true"></defaultProxy>
    </system.net>
    
  • В вашей привязке в привязке элемента / безопасности / транспорта установите proxyCredentialType = "Ntlm"

0 голосов
/ 07 июля 2010

Две вещи. Убедитесь, что в вашей службе WCF разрешены учетные данные Windows. Как только вы подтвердите, что должны иметь возможность настроить свой клиент для использования типа учетных данных Windows. Пример (из MSDN) ниже.

WSHttpBinding myBinding = new WSHttpBinding();
myBinding.Security.Mode = SecurityMode.Message;
myBinding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...