我们拥有内部部署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不起作用吗?
答案 0 :(得分:0)
我们面临同样的问题,对我们而言,它与登录页面和身份验证有关。如果您使用自定义登录页面,请按照here所述的步骤使CSOM正常工作。如果您没有使用自定义登录页面,您仍然可以使用SharePoint默认登录页面尝试相同的活动。