Подтвердить что ты не робот

Как указать учетные данные Windows в файле конфигурации клиента WCF

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

Теперь я хочу подключиться к службе из клиента ASP.NET, который работает под локальной учетной записью. Я хочу подключиться к службе WCF, используя учетные данные Windows (домен\пользователь и пароль), доступные для приложения ASP.NET.

Я знаю, что могу сделать это в коде, используя ClientBase <T> .ClientCredentials.

Есть ли способ указать учетные данные (домен\пользователь и пароль) в файле client.config клиента, поэтому мне не нужно менять код?

ИЗМЕНИТЬ

Если это невозможно сделать в файле конфигурации, существует ли способ использования System.Net.ICredentials или System.Net.NetworkCredential в качестве учетных данных для службы WCF?

.NET Framework обеспечивает их как однородный способ предоставления сетевых учетных данных, но с WCF это, похоже, выбрасывается в пользу новой несовместимой системы на основе несвязанного класса System.ServiceModel.Description.ClientCredentials.

РЕДАКТИРОВАТЬ 2

Принятие ответа Marc на исходный вопрос - кажется, что нет никакого способа сделать это в файле конфигурации клиента: (

Я видел бы это как недостаток WCF - я не согласен с тем, что Microsoft намеренно препятствует нам вводить учетные данные в файле конфигурации - после того, как все они должны быть где-то сохранены, а в Framework есть средства для шифрования файл конфигурации. Наверное, я мог бы создать для этого пользовательский элемент BehaviorExtensionElement, но он должен быть доступен из коробки.

Он также немного несовместим: элемент конфигурации system.net/mailSettings/smtp/network позволяет указать учетные данные, поэтому почему WCF?

Что касается второго вопроса об использовании System.Net.NetworkCredential, кажется, из этого блога, что это возможно, по крайней мере, при использовании проверки подлинности Windows, со следующим кодом:

factory.Credentials.Windows.ClientCredential =
   new System.Net.NetworkCredential(name, password, domain);
4b9b3361

Ответ 1

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

Ответ 2

Svc.ClientCredentials.UserName.UserName = AppSettings["WCFSvcUsername"];
Svc.ClientCredentials.UserName.Password = AppSettings["WCFSvcPassword"];

неверно. Он используется с безопасностью сообщений и clientCredentialType = "UserName" . Вы должны использовать

Svc.ClientCredentials.Windows.ClientCredential = new NetworkCredential(...);

Ответ 3

Кажется, нет способа установить id и пароль в конфигурации привязки по умолчанию (я все еще ищу), я сделал это, добавив следующий код, но все же хочу, чтобы Microsoft добавила его к привязкам по умолчанию

    <appSettings>
     <add key="user"  value="user" />
     <add key="password"  value="password" />
     <add key="domain"  value="domain" />
   </appSettings>


   // client side code
   string userName =  ConfigurationManager.AppSettings.Get("user");
   string pswd = ConfigurationManager.AppSettings.Get("password");
   string domain = ConfigurationManager.AppSettings.Get("domain");

   client.ClientCredentials.Windows.ClientCredential.Domain = domain; 
   client.ClientCredentials.Windows.ClientCredential.UserName = userName;
   client.ClientCredentials.Windows.ClientCredential.Password = pswd;

Себастьян Кастальди

Ответ 4

Я понимаю, что нет механизма для указания учетных данных в <binding> теги, но почему бы не сделать это:

 Svc.ClientCredentials.UserName.UserName = AppSettings["WCFSvcUsername"];
 Svc.ClientCredentials.UserName.Password = AppSettings["WCFSvcPassword"];

Ответ 5

Svc.ClientCredentials.Windows.ClientCredential = 
    System.Net.CredentialCache.DefaultNetworkCredentials;

Ответ 6

Вы пробовали это?

<system.web>
      <identity impersonate="true" userName="username" password="password"/>
</system.web>