Windows認証で構成されたカスタムWCF Webサービスと、前者を呼び出す必要があるWPFクライアントアプリケーションがあります。このサービスはユーザー名をチェックし、データベースから特定のデータを取得します。そのため、アプリケーションを実行しているユーザーの資格情報を使用してサービスを呼び出す必要があります。
問題は、私のサービスが Windows 認証を使用して別のサイトでホストされており、ユーザーが別のアカウントで認証できることです。Windows (または IE?) は、最後に使用されたアカウントをキャッシュし、クライアント アプリもそれを使用します!
例:
「MYDOMAIN\AdminUser」で Web サイトに入ります
次のコードを実行します (クライアント アプリから、Web コードではありません)。
var client = new TestServiceClient();
var currentUser = WindowsIdentity.GetCurrent(); // just informative field nothing more, i don't use it anyhow
// currentUser.Name = "MYDOMAIN\\MyUserName" - it's current value, i'm not trying to set it
client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
var data = client.GetTestData();
サービスは「MYDOMAIN\AdminUser」によって呼び出されます..
名前とパスワードを使用して NetworkCredential を作成できることはわかっていますが、それをどこかに保存したり、暗号化したりする必要があります。
問題を明確にするために: あるアカウントで実行されているクライアント プロセスは、別のアカウントでサービスを呼び出します。