2009-06-04 6 views
25

Windows認証でBasicHttpBindingを使用するWCFサービスがあります。 ほとんどのクライアントはドメインアカウントで、既定の資格情報を使用してサービスに接続します。WCFクライアント構成ファイルでWindows資格情報を指定する方法

ローカルアカウントで実行されているASP.NETクライアントからサービスに接続します。私は、ASP.NETアプリケーションで使用できるWindows資格情報(domain \ userとpassword)を使用してWCFサービスに接続したいと考えています。

私はClientBase < T> .ClientCredentialsを使用してコードでこれを行うことができます。

クライアントのweb.configファイルに資格情報(domain \ userとpassword)を指定する方法があるので、コードを変更する必要はありませんか?

EDIT

それは、設定ファイルで行うことができない場合は、WCFサービスの資格としてSystem.Net.ICredentialsまたはSystem.Net.NetworkCredentialを使用する方法はありますか?

.NET Frameworkではこれらをネットワーク資格情報を提供する均質な方法として提供していますが、これはWCFでは無関係のSystem.ServiceModel.Description.ClientCredentialsクラスに基づいた新しい互換性のないシステムに捨てられたようです。元の質問へのMarcの答えを受け入れる

EDIT 2

- クライアント構成ファイルでこれを行う方法はありませんようです:(

私はWCFの欠乏としてこれを見るでしょう - 私は、マイクロソフトが意図的に構成ファイルに資格情報を入れるのをやめさせるべきだということを受け入れるつもりはない - すべてのファイルはどこかに格納しなければならず、フレームワークには構成ファイルを暗号化するための機能が含まれている。それは箱からすぐに利用できるはずです。

これはやや矛盾しています。system.net/mailSettings/smtp/network設定要素では、資格情報を指定できるので、WCFはなぜですか? System.Net.NetworkCredentialの使用に関する2つ目の質問について

、次のコードを使用して、Windows認証を使用して、少なくともとき、それが可能であることをthis blogからのようだ:

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

答えて

11

あなたはあなたを指定することはできませんconfigファイルの資格情報は残念ですが、コードでこれを行う必要があります。そうしないと、設定ファイルの資格情報がプレーンテキストになる可能性があります。

+3

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

デフォルトのバインディングに追加「...あなたの設定ファイルで、プレーンテキストでは、」一般的に良いことではありませんが、暗号化された設定ファイルでOKです。 – 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"とともに使用されます。あなたはそれがデフォルトのバインディング設定でIDとパスワードを設定する方法は、(私はまだ探しています)が存在しないようだ、私はコード怒鳴るを追加し、それをしなかったが、それでもマイクロソフトうを願っ

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

私は完全な投稿をしませんでした。あなたはすでに質問の答えを知っています - 申し訳ありません。 – Steven

+0

これは非常に古い質問ですが、私は同じ問題を抱えている人のためにこれを投稿します。 – Steven

+7

あなたも完全な文章を書いていません;) – Gagege

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

を使用する必要がありますセバスチャンCastaldi

関連する問題