您如何获得当前登录用户的凭据(NetworkCredential)?

Bla*_*ght 32 .net defaultnetworkcredentials

我正在编写一些代码来使用第三方组件,我需要提供一个在我开始使用它时实现ICredentials的对象.

如果我写以下内容......

var credential = new NetworkCredential("MyUsername", "MyPassword");
Run Code Online (Sandbox Code Playgroud)

...并通过"凭证",没关系.但我想传递当前用户的凭据(它是一个Windows服务,因此以指定用户身份运行).

我尝试了以下两种方法,但似乎都不起作用(或返回任何内容):

NetworkCredential credential = System.Net.CredentialCache.DefaultCredentials;
NetworkCredential credential = CredentialCache.DefaultNetworkCredentials;
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议如何获取approriate对象,该对象代表运行该服务的用户名的凭据?

谢谢,罗斯

Ale*_*xan 0

您需要进行模拟,例如:

    System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext = 
    ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();

//Insert your code that runs under the security context of the authenticating user here.

impersonationContext.Undo();
Run Code Online (Sandbox Code Playgroud)

http://support.microsoft.com/kb/306158

或者您可以使用 web.config:

<identity impersonate="true" />
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但我作为 Windows 服务运行,而不是作为 ASP 网页运行。到目前为止我发现的所有建议都与 ASP 相关。我已经尝试过模仿,但它没有帮助/工作(在这种情况下)。令我惊讶的是,似乎无法获取当前用户(毕竟已登录)的凭据,而是编写了一些黑客方法来存储用户的用户名和密码。哎哟!(不过还是谢谢你的建议) (2认同)