0

我想让远程管理员(使用本地或域凭据)通过 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 上找到了这个。还没有机会看,但这可能是要走的路。

4

3 回答 3

1

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

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

这是一篇关于传递凭据的各种方法的文章:http:
//blogs.msdn.com/b/sonuarora/archive/2007/04/21/setting-client-credentials.aspx

于 2010-12-10T12:56:46.787 回答
0

假设这是托管在 IIS 中,您需要在 IIS 管理器中关闭匿名身份验证。这应该强制用户使用 Windows 帐户登录到机器。您可能还需要启用 ASP.NET 模拟。

于 2010-12-10T12:29:01.083 回答
0

以下是如何使用 pInvoke 使用标准 Windows 对话框提示用户如何在 C# .Net 3.5 SP1 中显示身份验证对话框

于 2010-12-10T14:39:51.753 回答