1

我必须实现以下场景: ASP .NET webapp 1. 用户登录 2. 使用登录用户的凭据,我必须从 Sharepoint 站点下载一些文件;

环境: - 现在 web.config 设置为模拟和 Windows 身份验证。上,但还必须使用基本身份验证 - 我使用 System.Net.WebClient 使用 Sharepoint 站点的 Web 服务下载 Sharepoint 文件,而这个 WebClient 需要一个 Credential 对象,这就是我需要 NetworkCredential 对象的原因。

PS:CredentialCache.DefaultCredentials 和 CredentialCache.DefaultNetworkCredentials 返回一个用户名和密码为空的凭据,所以我不能用它来访问 Sharpeoint 站点。获取 System.Security.Principal.WindowsIdentity.GetCurrent() 或 System.Web.HttpContext.Current.User.Identity 也不适合,因为我只能通过这种方式获取用户名,并且为了实例化 NetworkCredential 我需要一个 uname和 pw。

4

2 回答 2

4

仅供参考,我想我已经设法解决了这个问题;我正在使用模拟上下文,我使用CredentialCache.DefaultNetworkCredentials,并将WebClient's设置UseDefaultCredentials为 true,到目前为止,这似乎是有效的。所以:

WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
using (identity.Impersonate())
{
    webClient.Credentials = CredentialCache.DefaultNetworkCredentials;
    webClient.UseDefaultCredentials = true;
}

这对我有用。

于 2013-10-15T12:28:23.493 回答
1

如果可能的话,您可以尝试使用表单身份验证,并将 .ASPXAUTH cookie 与对该文件的请求一起发送,请参阅此答案:

如何验证 WebClient 请求?

编辑确保你在 web.config 中有这个,以便Windows 身份验证正常工作:

<system.web>

    <authentication mode="Windows" />

     <authorization>
         <deny users="?"/>
      </authorization>

</system.web>

于 2013-10-06T19:19:50.663 回答