リモート管理者(ローカルまたはドメインの資格情報を持つ)がWCFTCPバインディングを介してWindowsサービスを制御できるようにしたい。これを行うには、リモートユーザーを管理者として認証する必要があります。プリンシパルユーザー/ロールを確認できますが、リモートユーザーに正しいユーザーの詳細/トークンを要求する方法がわかりません。
これは、 WCFTCPエンドポイントを管理者に制限することに関する私の以前の質問に関連しています。[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
制限付きサービスメソッドに追加してをキャッチする代わりに、次の方法でSecurityException
チェックできるようです。
if (!System.Threading.Thread.CurrentPrincipal.IsInRole("Administrators"))
return MethodResult.AccessDenied;
// haven't tested if it's the service thread or the remote user yet.
別のプリンシパルとして接続を再開できるように、アクセス拒否の結果が返された場合、リモートユーザーにWindows認証を求めるにはどうすればよいですか?
もちろん、変更はリモートユーザーのクライアントアプリケーションに影響を与える必要があります。おそらく、それを行うためのよりクリーンなWCFの方法がありますか?
編集: 「。netのなりすまし」を検索すると、CodeProjectでこれにたどり着きました。見る機会がありませんでしたが、これが進むべき道かもしれません。