运行clientContext.ExecuteQuery()时出现拒绝/ 401错误

时间:2015-05-15 15:31:04

标签: iis sharepoint

我正在创建一个MVC应用程序,要求我从Sharepoint站点中获取组用户。当我通过IIS(localhost)发布并运行它时,我收到401错误。当我通过调试器运行时,一切都按预期工作。

我假设它是基于上下文的权限错误。有没有办法以编程方式使用我当前的NTLM凭据正常运行应用程序(而不是像IIS帐户/用户那样)?

代码 (我现在在移动设备上,所以如果有什么看起来很糟糕我很抱歉......)

// Constructor
clientContext = new ClientContext("http://sharepointsite");
clientContext.Credentials = CredentialCache.DefaultNetworkCredentials;
//clientContext.Credentials = new NetworkCredentials("username", "password", "domain"); <- this works just fine if I hard code my current credentials

// Calling method
UserCollection users = GetUsersCollection();
clientContext.Load(users);
try {
    clientContext.ExecuteQuery(); // 401 error here
    return true;
}
catch {
    return false;
}

1 个答案:

答案 0 :(得分:1)

您可以使用CSOM指定连接到SharePoint的凭据,如下所示:

clientContext.Credentials = new NetworkCredential("Username", "Password", "Domain");

您可以像这样进行MVC模拟:

        string currentUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
        System.Security.Principal.WindowsImpersonationContext impersonationContext;
        impersonationContext =
            ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();
        currentUser += "Impersonate:" + System.Security.Principal.WindowsIdentity.GetCurrent().Name;
        impersonationContext.Undo();
        ViewBag.U = currentUser;
        return View();

我在这个帖子中找到了这个例子:

http://forums.asp.net/t/1961337.aspx?Asp+Net+MVC+5+how+to+impersonate+user+on+IIS