C#SharePoint 2013 CSOM多重身份验证

时间:2014-10-03 14:23:20

标签: c# authentication sharepoint ntlm csom

我们拥有内部部署SharePoint2013,并且启用了多种身份验证方法(NTLM和FBA)。

现在,当我尝试使用CSOM对此服务器进行身份验证并尝试获取List时,服务器返回:"访问被拒绝。您无权执行此操作或访问此资源。"虽然我确实拥有权限(具有完全控制权和所需的任何权限),但SharePoint为我提供了FedAuth cookie。用fiddler检查了请求,看起来CSOM即使启动并运行也无法访问client.svc服务?代码示例:

using System;
using System.Net;
using System.Security;
using SP = Microsoft.SharePoint.Client;

namespace TestConsoleTemp
{
public class Program
{
  static void Main(string[] args)
  {
        using (SP.ClientContext context = new SP.ClientContext("https://mywebsite.com"))
        {
            var cc = new CredentialCache();
            var passWord = new SecureString();
            foreach (char c in "password".ToCharArray()) passWord.AppendChar(c);
            cc.Add(new Uri("https://myportal.sis.lt"), "NTLM", new NetworkCredential("username", passWord, "domain"));
            context.Credentials = cc;
            context.ExecutingWebRequest += new EventHandler<SP.WebRequestEventArgs>(clientContext_ExecutingWebRequest);
            var list = context.Web.Lists.GetByTitle("listName");
            context.Load(list);
            context.ExecuteQuery();
        }
    }
    static void clientContext_ExecutingWebRequest(object sender, SP.WebRequestEventArgs e)
    {
        e.WebRequestExecutor.WebRequest.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
    } 
  }
}

相同的代码适用于我们只有NTLM身份验证的其他服务器或云端(Office365),即使不添加标头。

有人可以解释为什么在启用NTLM和FBA时CSOM不起作用吗?

1 个答案:

答案 0 :(得分:0)

我们面临同样的问题,对我们而言,它与登录页面和身份验证有关。如果您使用自定义登录页面,请按照here所述的步骤使CSOM正常工作。如果您没有使用自定义登录页面,您仍然可以使用SharePoint默认登录页面尝试相同的活动。