0

ドメイン\ユーザーとプレーンテキストのパスワードなど、いくつかのユーザー資格情報を持つクライアント コンソール アプリケーションがあります。クライアント アプリは、LogonUser (dwLogonType:LOGON32_LOGON_NETWORK) win32 API を呼び出して、そのユーザーの windowsidentity オブジェクトを取得します。私はwindowsidentityを使用して、偽装してWCFサービス呼び出しを行います(別のマシンでホストされています)。WCF サービスは、Windows 統合セキュリティで TCP プロトコルを使用するように構成されています。呼び出しは SecurityNegotiation 例外で失敗し、次のエラーが発生しました: リモート サーバーが相互認証要件を満たしていませんでした。

ここでの私の仮定は、エンドポイントが Windows 統合認証を使用するように構成されているため、サーバーが拒否する匿名のクライアント ID を認識していることです。私の推測では、Windows 委任用にサーバー アカウントを設定する必要があります。私の推測は正しいですか?

また、

  1. dwLogonType = LOGON32_LOGON_NETWORK の選択は正しいですか?
  2. LogOnUser (dwLogonType = LOGON32_LOGON_NETWORK) によって返されたトークンをリモート WCF 呼び出しに使用できますか?
4

1 に答える 1

1

ユーザーの ID でネットワーク リソースにアクセスする場合は、偽装しているユーザーに委任権限が必要です。前述のシナリオでは、(クライアントが実行されている) クライアント アカウントは、一部のユーザーになりすましていて、ユーザー ID をリモート WCF サービスに伝達する必要があるため、委任権を持っている必要があります。

dwLogonType = LOGON32_LOGON_NETWORK の選択は正しいですか?

いいえ。

LogOnUser (dwLogonType = LOGON32_LOGON_NETWORK) によって返されたトークンをリモート WCF 呼び出しに使用できますか?

dwLogonType = LOGON32_LOGON_NETWORK オプションを使用すると、LogonUser は、ユーザー ID をネットワーク リソースに伝達するために使用できないトークンを返します。

オプション dwLogonType = LOGON32_LOGON_NETWORK_CLEARTEXT を LogonUser とともに使用すると、問題が修正されました。そのオプションを使用して、LogonUser は、ユーザーの ID でネットワーク リソースにアクセスできるトークンを生成しました。

私のソリューションについては、arx の功績を認めます。私が問題を解決できたのは彼のコメントだけでした。

于 2012-02-06T10:45:30.440 に答える