受限远程WCF服务:Windows身份验证提示

受限远程WCF服务:Windows身份验证提示,wcf,authentication,nettcpbinding,password-prompt,Wcf,Authentication,Nettcpbinding,Password Prompt,我想让远程管理员(具有本地或域凭据)通过WCF TCP绑定控制我的Windows服务。为此,我需要以管理员身份验证远程用户。我可以检查主要用户/角色,但我不知道如何提示远程用户输入正确的用户详细信息/令牌 这与我先前的问题有关。与其将[PrincipalPermission(SecurityAction.Demand,Role=“Administrator”)]添加到我的受限服务方法中并捕获安全异常,我似乎可以通过以下方法检查它: if (!System.Threading.Thread.Cur

我想让远程管理员(具有本地或域凭据)通过WCF TCP绑定控制我的Windows服务。为此,我需要以管理员身份验证远程用户。我可以检查主要用户/角色,但我不知道如何提示远程用户输入正确的用户详细信息/令牌

这与我先前的问题有关。与其将
[PrincipalPermission(SecurityAction.Demand,Role=“Administrator”)]
添加到我的受限服务方法中并捕获
安全异常
,我似乎可以通过以下方法检查它:

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上找到了。还没有机会查看,但这可能是解决问题的方法。

假设此主机位于IIS中,则需要在IIS管理器中关闭匿名身份验证。这将强制用户使用Windows帐户登录到计算机。您可能还需要启用ASP.NET模拟。

您需要在WCF调用中传入用户的凭据。通常,客户端应用程序只是“捕获”当前正在运行的用户的凭据。或者,您可以明确指定用户名和密码。因此,如果愿意,您可以提示用户提供一组替代凭据

无论哪种方式,客户端应用程序都需要提示用户。授权失败时,WCF调用应返回错误(代码或异常),客户端应捕获该返回并向用户显示提示,然后使用新凭据重试。WCF本身无法处理对用户的提示

下面是一篇关于传递凭据的各种方法的文章:

以下是使用pInvoke使用标准windows对话框提示用户的方法

不,这是一个windows服务,客户端是一个windows窗体应用程序。所以不用了,谢谢。提供本机提示,尽管外观很旧。