3

WCF Web サービスを呼び出す WPF Windows クライアントがあります。ユーザーは、アプリケーションを開始する前に既に Windows ドメインにログインしており、WCF サービスは Windows 認証を使用しています。

WCF サービスを呼び出すときに、WPF クライアントが既にログインしているユーザーの WindowsPrincipal を使用するようにします。これを行うために明示的なユーザー名とパスワードを使用して新しい NetworkCredential インスタンスを作成したくありません。単純に、ユーザーに (Windows とアプリで) 2 回ログインするように要求するのは、かなりユーザーフレンドリーではないからです。

私が見たサンプルのほとんどは、この方法を使用して資格情報を設定していますが、これは私が望んでいるものではありません

serviceClientProxy.ClientCredentials.Windows.ClientCredential
= new NetworkCredential("username", "password", "domain");

代わりに、私はこのようなことをしたいと思います

serviceClientProxy.ClientCredentials.Windows.AllowedImpersonationLevel
    = TokenImpersonationLevel.Identification;
serviceClientProxy.ClientCredentials.Windows.ClientCredential
    = { /* network credential for already logged in user */ }

つまり、既に存在する (そして機能している) の NetworkCredential が必要です。

new WindowsPrincipal(WindowsIdentity.GetCurrent())

誰もこれを行う方法を知っていますか? app.config で設定security mode = ""と転送を試みましたが、これまでのところ役に立ちません。clientCredentialType = ""

4

2 に答える 2

0

app.config で:

  • 追加:

    <system.net>
      <defaultProxy useDefaultCredentials="true"></defaultProxy>
    </system.net>
    
  • 要素 binding/security/transport のバインディングで、proxyCredentialType="Ntlm" を設定します。

于 2010-07-07T14:00:32.107 に答える
0

2つのこと。Windows 資格情報を許可するように WCF サービスが設定されていることを確認します。Windows 資格情報の種類を使用するようにクライアントを構成できるはずであることを確認したら。例 (MSDN から) を以下に示します。

WSHttpBinding myBinding = new WSHttpBinding();
myBinding.Security.Mode = SecurityMode.Message;
myBinding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
于 2010-07-07T13:51:23.640 に答える