C# ASP .NET;获取登录用户的网络凭据对象
本文关键字:网络 对象 用户 登录 ASP NET 获取 | 更新日期: 2023-09-27 18:34:11
我必须实现以下场景:ASP .NET webapp1. 用户登录2.使用登录用户的凭据,我必须从Sharepoint站点下载一些文件;
环境:- 现在web.config设置为模拟打开,Windows身份验证打开,但也必须使用基本身份验证- 我使用 System.Net.WebClient 通过 SharePoint 站点的 Web 服务下载 SharePoint 文件,而此 WebClient 需要一个 Credential 对象,这就是我需要 NetworkCredential 对象的原因。
PS:CredentialCache.DefaultCredentials和CredentialCache.DefaultNetworkCredentials返回一个用户名为空的凭据和pw,所以我不能用它来访问Sharpeoint网站。它也不适合获取 System.Security.Principal.WindowsIdentity.GetCurrent() 或System.Web.HttpContext.Current.User.Identity,因为我只能通过这种方式获得一个用户名,并且为了实例化 NetworkCredential,我需要一个 uname 和 pw。
仅供参考,我想我已经设法解决了这个问题;我正在使用模拟上下文,我使用CredentialCache.DefaultNetworkCredentials
,并将WebClient
的UseDefaultCredentials
设置为 true,到目前为止这似乎有效。所以:
WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
using (identity.Impersonate())
{
webClient.Credentials = CredentialCache.DefaultNetworkCredentials;
webClient.UseDefaultCredentials = true;
}
这对我有用。
如果可能的话,您可以尝试使用窗体身份验证(如果可能的话)并发送 .ASPXAUTH cookie 以及对该文件的请求,请参阅此答案:
如何对 Web 客户端请求进行身份验证?
编辑确保在 web.config 中具有此功能,以便 Windows 身份验证正常工作:
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
</system.web>