我使用LinqToEntitiesDomainService
连接到SQL Server数据库。这需要我验证的Windows身份验证。
我编写了一个使用Activator.CreateInstance(...)
在服务器上运行可执行文件的Web服务。我希望这也使用Windows身份验证。 然而,我需要该服务具有运行可执行文件的适当权限。
当我立即运行该服务时,它运行正常。我的帐户具有正确的身份验证角色。我在服务器上也有类似神的权限,这使我可以使用Activator.CreateInstance(...)
命令。
虽然具有适当角色的其他用户可以进行身份验证,但他们的帐户在服务器上没有权限,也不应该。
是否有一些(最好是简单的)方式将服务作为一个用户运行,但是所有的身份验证都是通过Windows身份验证完成的?如果我只在一个应用程序池中完成所有操作也是最好的...
谢谢!
答案 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
}