使用Windows服务“以用户身份登录”用户作为Web请求的NetworkCredentials

时间:2018-09-26 16:59:13

标签: c# windows-services networkcredentials

我开发了一个Windows服务,该服务以“特定Windows用户”身份运行。 我使用此用户,因为它具有我需要在此Windows服务中请求的网站的权限。

问题是,当请求Web时,使用CredentialsCache.DefaultNetworkCredentials我使用已登录(WindowsIdentity.GetCurrent())到无法访问此Web的窗口的当前用户的凭据。我

我需要以某种方式传递Windows服务的“以以下身份登录”用户的凭据:

WebRequest request = WebRequest.Create("some url");
// the user running the service can be get from here:
// WindowsIdentity.GetCurrent(), but not the password
request.Credentials = "some code tobtain the user from the service user"

如果我使用:

request.Credentials = CredentialCache.DefaultNetworkCredentials;

它使用Windows帐户中的用户而不是Windows服务帐户中的用户。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

  

运行该服务的用户可以从以下位置获取:WindowsIdentity.GetCurrent(),而不是密码

如果您可以获取当前的WindowsIdentity,则应该可以impersonate

WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent();
using (WindowsImpersonationContext impersonatedUser = currentIdentity.Impersonate())
{
    // Check the identity.
    Console.WriteLine("After impersonation: " + WindowsIdentity.GetCurrent().Name);
    // Make the request
    WebRequest request = WebRequest.Create("https://google.com");
    // etc
}