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

StackOverflow https://stackoverflow.com/questions/950928

  •  10-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

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

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

Я бы рассматривал это как недостаток 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);
Это было полезно?

Решение

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

Другие советы

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

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

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

Кажется, нет способа установить идентификатор и пароль в конфигурации привязки по умолчанию (я все еще ищу), я сделал это, добавив код ниже, но все же хочу, чтобы 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;

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

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

 Svc.ClientCredentials.UserName.UserName = AppSettings["WCFSvcUsername"];
 Svc.ClientCredentials.UserName.Password = AppSettings["WCFSvcPassword"];
Svc.ClientCredentials.Windows.ClientCredential = 
    System.Net.CredentialCache.DefaultNetworkCredentials;

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

<system.web>
      <identity impersonate="true" userName="username" password="password"/>
</system.web>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top