Windows認証でBasicHttpBindingを使用するWCFサービスがあります。ほとんどのクライアントはドメインアカウントであり、デフォルトの資格情報を使用してサービスに接続します。
次に、ローカルアカウントで実行されているASP.NETクライアントからサービスに接続します。 ASP.NETアプリケーションで使用できるWindows資格情報(ドメイン\ユーザーとパスワード)を使用してWCFサービスに接続したい。
ClientBase <T> .ClientCredentialsを使用してコードでこれを実行できることを知っています。
コードを変更する必要がないように、クライアントのweb.configファイルで資格情報(ドメイン\ユーザーとパスワード)を指定する方法はありますか?
[〜#〜]編集[〜#〜]
構成ファイルでそれができない場合、System.Net.ICredentialsまたはSystem.Net.NetworkCredentialをWCFサービスの資格情報として使用する方法はありますか?
.NET Frameworkは、これらをネットワーク資格情報を提供する同種の方法として提供しますが、WCFでは、これは無関係なSystem.ServiceModel.Description.ClientCredentialsクラスに基づく新しい互換性のないシステムのために破棄されたようです。
EDIT 2
元の質問に対するMarcの回答を受け入れる-クライアント構成ファイルでこれを行う方法はないようです:(
私はこれをWCFの欠陥と見なします-資格情報をどこかに保存する必要があるため、Microsoftが構成ファイルに資格情報を配置することを故意に阻止するべきではないことを受け入れません。また、フレームワークには、構成ファイルを暗号化する機能が含まれています。私はこれのためにカスタムのBehaviorExtensionElementを作成できると思いますが、そのまま使用できるはずです。
これも少し矛盾しています:system.net/mailSettings/smtp/network構成要素では資格情報を指定できますが、なぜWCFではないのですか?
System.Net.NetworkCredentialの使用に関する2番目の質問については、 このブログ から、少なくともWindows認証を使用している場合、次のコードで可能であると思われます。
factory.Credentials.Windows.ClientCredential =
new System.Net.NetworkCredential(name, password, domain);
残念ながら、設定ファイルで資格情報を指定することはできません-これはコードで行う必要があります(そうしないと、設定ファイルの資格情報がプレーンテキストで表示される可能性があるため、あまり好ましくありません...)。 。
Svc.ClientCredentials.UserName.UserName = AppSettings["WCFSvcUsername"];
Svc.ClientCredentials.UserName.Password = AppSettings["WCFSvcPassword"];
間違っている。 message securityおよびclientCredentialType = "UserName"とともに使用されます。あなたは使うべきです
Svc.ClientCredentials.Windows.ClientCredential = new NetworkCredential(...);
デフォルトのバインディング構成で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;
セバスチャン・カスタルディ
<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>