我安装了Microsoft SharePoint 2013 onPremise Farm并安装了Microsoft Project Server 2013。
我正在尝试构建一个WebPart,它应该通过TeamSite中的CSOM连接到Project Server以获取项目信息。
这是我的超级简单代码:
string pwaPath = "http://sp2013/PWA";
ProjectContext projContext;
projContext = new ProjectContext(pwaPath);
projContext.Load(projContext.Projects);
projContext.ExecuteQuery();
尝试执行时,我收到以下错误:
ServerUnauthorizedAccessException
当我添加
projContext.Credentials = new NetworkCredential("administrator", "pass", "domain");
有效!但是如何使用登录用户创建代码,因为上面传递的凭据是当前登录的用户凭据。
答案 0 :(得分:0)
您的代码无法正常运行,因为服务器场解决方案不会在SharePoint用户的上下文中执行。如果您选中System.Security.Principal.WindowsIdentity.GetCurrent()
,则会看到当前身份是IIS内置IUSR
。这是用于发出请求的ClientContext
身份。
如果使用SPSecurity.RunWithElevatedPrivileges()
提升权限,将使用应用程序池标识执行代码。这在某些情况下可能已足够,但也可能不安全,因为所有用户都可以访问资源。