Как указать прокси-классу WCF-клиента использовать проверку подлинности Windows и WindowsPrincipal уже вошедшего в систему пользователя домена в качестве учетных данных?
У меня есть клиент 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 ответа
Две вещи. Убедитесь, что в вашей службе WCF разрешены учетные данные Windows. Как только вы подтвердите, что должны иметь возможность настроить клиент для использования типа учетных данных Windows. Пример (из MSDN) ниже.
WSHttpBinding myBinding = new WSHttpBinding();
myBinding.Security.Mode = SecurityMode.Message;
myBinding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
В вашем app.config:
Добавлять:
<system.net> <defaultProxy useDefaultCredentials="true"></defaultProxy> </system.net>
В вашей привязке в привязке элемента /security/transport установите proxyCredentialType="Ntlm"