【问题标题】:WebClient Credentials SharePoint IntranetWebClient 凭据 SharePoint Intranet
【发布时间】:2012-07-11 18:40:43
【问题描述】:

我现在正在解决一个问题,它涉及从我们的 LAN SharePoint 服务器将多个 PDF 文件下载到我们的 DMZ。

我们想要完成的是一个“NewsFeed”类型的应用程序。它的作用是从上传的 SharePoint 中制作的内容类型中获取列表数据,然后将它们发布到托管在 DMZ 上的外部网站,并附上相应 pdf 文件的链接。我们使用了 sharepoint 必须相当轻松地完成文本布局的 REST API,但我们现在遇到的问题是将上传文档的 .pdf 从 SharePoint 站点复制到 DMZ,因此我们可以将它们存储在缓存中,并且用户可以通过 href 访问它们。

这里是访问 SharePoint REST API 的有效代码。

        // Create the connection to sharepoint.  Credentials are managed within web.config
        SharePointListsREST.SharePointDataContext dc = new SharePointListsREST.SharePointDataContext(new Uri(ConfigurationManager.AppSettings["spUrl"]));
        CredentialCache cc = new CredentialCache();
        cc.Add(new Uri(ConfigurationManager.AppSettings["spUrl"]), "NTLM", new NetworkCredential(ConfigurationManager.AppSettings["spUser"], ConfigurationManager.AppSettings["spPassword"], ConfigurationManager.AppSettings["spDomain"]));
        dc.Credentials = cc;

这很完美,它能够进行身份验证、获取数据并显示它。对于 PDF 下载功能,我们有这个。

    private void GetPDF(string URL, string path)
    {
        if (System.IO.File.Exists(path))
            System.IO.File.Delete(path);
        WebClient wc = new WebClient();
        CredentialCache cc = new CredentialCache();
        cc.Add(new Uri(ConfigurationManager.AppSettings["spUrl"]), "NTML", new NetworkCredential(ConfigurationManager.AppSettings["spUser"], ConfigurationManager.AppSettings["spPassword"], ConfigurationManager.AppSettings["spDomain"]));

        wc.Credentials = cc;

        wc.DownloadFile(URL, path);
    } 

这根本不起作用并引发 401 Not Authorized 错误。但是,如果您尝试通过转到 http://XX.XX.XX.XX/.../test.pdf 来访问 pdf 文件,系统将提示您输入用户名/密码。输入基于 Windows 的凭据将使我能够访问 pdf。

我尝试过使用wc.UseDefaultCredentials = true;,但它也不起作用。有没有人对我如何让它与网络客户端一起工作有任何想法?

这是来自 IIS 的错误日志之一。

2012-07-11 00:56:12 XX.XX.XX.XX GET /Employee+Images/_t/sample.jpg - 80 - 192.168.200.12 - 401 2 5 0

【问题讨论】:

    标签: c# asp.net sharepoint authentication webclient


    【解决方案1】:

    在 SharePoint 网站上使用 Windows 身份验证时,可以选择模拟用户并在模拟块内运行整个 WebClient 代码。

    请参阅此问题How can I use Directory.CreateDirectory with a different user id? 关于模拟用户。

    或者您可以使用 Runas 以特殊用户身份运行整个过程 - 无需更改代码。

    【讨论】:

    • 嗯,我们尝试在 web.config 中设置模拟,但仍然返回相同的错误消息。在与我的经理进行了一些澄清后,我们正在运行 IIS 7,我们在日志中得到的错误是 401.2(我认为)。
    猜你喜欢
    • 1970-01-01
    • 2016-03-21
    • 2019-11-09
    • 1970-01-01
    • 2014-12-01
    • 2012-06-22
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多