我正在创建一个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;
}
答案 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