2009-06-04 3 views
25

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

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

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

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

EDIT

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

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

EDIT 2

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

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

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

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

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

ответ

11

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

+3

«... в файле конфигурации, в виде обычного текста» как правило, не очень хорошая вещь, но в файле конфигурации зашифрованного в порядке. – Joe

+0

@marc_s До сих пор недоступно для установки через файл конфигурации? –

+1

@Johnny_D: нет, насколько я знаю. –

0

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

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

Нет, это не помогает - серверу ASP.NET не доверяют для делегирования. – Joe

4

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

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

, который будет работать, но я настоятельно рекомендую шифровать ваш файл конфигурации в этом случае! –

+0

Да, я знаю, что могу сделать это в коде, я хочу избежать изменения кода. – Joe

+0

Joe - мой пример позволит вам указать свое имя пользователя и пароль в файле app/web.config, поскольку вы не можете сделать это изначально. – Lewis

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

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

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

Я не сделал ваш полный пост. Вы уже знаете ответ на этот вопрос - извините. – Steven

+0

Хотя это очень старый вопрос, я публикую это для тех, кто с той же проблемой. – Steven

+7

Вы также не сделали свое полное предложение;) – Gagege

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

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

Sebastian Castaldi

Смежные вопросы