WCF服务模拟一个用户但仍然是用户Windows身份验证?

时间:2011-09-09 18:36:08

标签: silverlight wcf iis wcf-security

我使用LinqToEntitiesDomainService连接到SQL Server数据库。这需要我验证的Windows身份验证。

我编写了一个使用Activator.CreateInstance(...)在服务器上运行可执行文件的Web服务。我希望这也使用Windows身份验证。 然而,我需要该服务具有运行可执行文件的适当权限。

当我立即运行该服务时,它运行正常。我的帐户具有正确的身份验证角色。我在服务器上也有类似神的权限,这使我可以使用Activator.CreateInstance(...)命令。

虽然具有适当角色的其他用户可以进行身份​​验证,但他们的帐户在服务器上没有权限,也不应该。

是否有一些(最好是简单的)方式将服务作为一个用户运行,但是所有的身份验证都是通过Windows身份验证完成的?如果我只在一个应用程序池中完成所有操作也是最好的...

谢谢!

1 个答案:

答案 0 :(得分:2)

是的,你可以,看看这个article。这显示了一些模仿用户的技术。

using (WindowsImpersonationContext impersonationContext =
                                 ((WindowsIdentity)User.Identity).Impersonate())
{
    // do something as current user
}

或者在WCF中,你也可以明确地定义它。

public class HelloService : IHelloService
{
    [OperationBehavior(Impersonation = ImpersonationOption.Required)]
    public string Hello(string message)
    {
        return "hello";
    }
}

请注意这两种技术冒充客户端(来电者)。

要明确模仿其他用户,您需要一些P / Invoke。有一个project here可以非常整齐地为你包装。然后你可以这样做:

using (new Impersonator("myUsername", "myDomainname", "myPassword"))
{
   // do something as myUsername
}