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。

C# ASP .NET;获取登录用户的网络凭据对象

仅供参考,我想我已经设法解决了这个问题;我正在使用模拟上下文,我使用CredentialCache.DefaultNetworkCredentials,并将WebClientUseDefaultCredentials设置为 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>