3 台のマシンはすべて同じドメインにあります
- マシン 1 - user1 の下で実行されているアプリケーションがあり、そこから要求が生成されます
- マシン 2 - WSHttpBinding を使用して、WCF サービスをホストする Network Service の下で実行される Windows サービスです。
- マシン 3 - user1 がフォルダーへの書き込み権限を持つ共有フォルダー
理想的には、WSHttpBinding はセキュリティ コンテキストをアプリケーションから WCF サービスに自動的に転送するため、共有の場所にファイルを書き込むことができるはずです。なぜなら、Machine 1 のアプリケーションから Machien 3 Share Location にファイルを直接書き込もうとすると、成功するからです。
しかし、驚いたことに、サービスを介して共有場所にファイルを書き込むことができません。「アクセスが拒否されました」というメッセージが表示されます
前述したように、WSHttpBinding を使用しており、理想的にはユーザー コンテキストが Service に転送されます。クライアント、つまりマシン 1 では、偽装レベルは System.Security.Principal.TokenImpersonationLevel.Impersonation として設定されます。そのため、Network Service は Domain\user1 として自身を偽装できます。3台目のマシンのフォルダに書き込むにはそれで十分ですか?
それとも、クライアント偽装レベルを System.Security.Principal.TokenImpersonationLevel.Delegation として設定する必要がありますか? (両方試しましたがダメでした)
また、別の情報: マシン 2 は "委任に対して信頼されています"。SPN は、ドメイン コントローラーでこのマシン用にセットアップされます。
操作コントラクトは次のように宣言されます。
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public void WriteData(string content)
{
}
そして今もなお、私たちはこの問題に直面しています。