我想让远程管理员(使用本地或域凭据)通过 WCF TCP 绑定控制我的 Windows 服务。为此,我需要以管理员身份验证远程用户。我可以检查主要用户/角色,但我不知道如何提示远程用户提供正确的用户详细信息/令牌。
这与我之前关于Restricting WCF TCP endpoint to Administrators的问题有关。而不是添加[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
到我的受限服务方法并捕获 a 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 impersonation”让我在 CodeProject 上找到了这个。还没有机会看,但这可能是要走的路。