2014-10-03 83 views
0

我们有自己的内部部署SharePoint2013,它有多种认证方法启用(NTLM和FBA)。C#的SharePoint 2013 CSOM多认证

现在,当我尝试使用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

我们面临同样的问题,对我们来说,它与登录页面和身份验证有关。如果您使用的是自定义登录页面,请按照here中描述的步骤获取CSOM的工作。如果您未使用自定义登录页面,则仍可以使用SharePoint默认登录页面尝试相同的活动。

+0

我们有一个自定义的登录页面,只是想知道如果有可能,而无需修改SharePoint站点本身进行身份验证,因为它并不总是能够做到这一点的情况下,你正在开发一个客户端,并没有控制它。 – PsMaster 2014-11-03 08:55:18

+0

我也想为我的SharePoint网站相同,但CSOM是无法访问登录页面在15荨麻疹文件夹,因此错误。我没有找到这个[文章](http://blogs.msdn.com/b/sridhara/archive/2014/02/06/sharepoint-2013-csom-call-from-web-part-fails-with-401- for-all-users.aspx),但还没有在我的系统上尝试过。可能会帮助你。 – Godwin 2014-11-03 12:56:38