25

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クラスに基づく新しい互換性のないシステムを優先してこれが破棄されたようです。

編集2

元の質問に対するマークの回答を受け入れる-クライアント構成ファイルでこれを行う方法はないようです:(

これは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);
4

6 に答える 6

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

間違っています。これは、メッセージ セキュリティclientCredentialType="UserName"で使用されます。使用する必要があります

Svc.ClientCredentials.Windows.ClientCredential = new NetworkCredential(...);
于 2010-09-17T09:11:51.617 に答える
10

残念ながら、構成ファイルで資格情報を指定することはできません-コードでこれを行う必要があります(そうしないと、構成ファイルの資格情報がプレーンテキストで終了する可能性があるためです-良いことではありません....) .

于 2009-06-04T14:30:56.190 に答える
5

デフォルトのバインディング構成でIDとパスワードを設定する方法はないようです(私はまだ探しています)、私は以下のコードを追加してそれを行いましたが、それでもマイクロソフトがデフォルトのバインディングにそれを追加することを望みます

    <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;

セバスチャンカスタルディ

于 2011-05-16T14:44:45.797 に答える
4

<binding>タグ内にクレデンシャルを指定するメカニズムがないことは理解していますが、これを行わないのはなぜですか。

 Svc.ClientCredentials.UserName.UserName = AppSettings["WCFSvcUsername"];
 Svc.ClientCredentials.UserName.Password = AppSettings["WCFSvcPassword"];
于 2009-06-04T14:44:44.027 に答える
2
Svc.ClientCredentials.Windows.ClientCredential = 
    System.Net.CredentialCache.DefaultNetworkCredentials;
于 2011-04-06T19:24:38.803 に答える
0

これを試しましたか?

<system.web>
      <identity impersonate="true" userName="username" password="password"/>
</system.web>
于 2009-06-04T14:41:53.703 に答える