2016-06-13 30 views
0

Microsoft SharePoint 2013 onPremise Microsoft Project Server 2013がインストールされたファーム。CSOMを介してProject Serverに接続しようとするとServerUnauthorizedAccessExceptionが発生する

プロジェクト情報を取得するためにTeamSiteからCSOMを介してProject Serverに接続する必要があるWebPartを構築しようとしています。

これは私の超簡単なコードです:

string pwaPath = "http://sp2013/PWA"; 
ProjectContext projContext; 

projContext = new ProjectContext(pwaPath); 

projContext.Load(projContext.Projects); 
projContext.ExecuteQuery(); 

それを実行しようとすると、私次のエラーを取得する:私は

projContext.Credentials = new NetworkCredential("administrator", "pass", "domain"); 

は、それが動作する追加

ServerUnauthorizedAccessException

!しかし、ログインしたユーザーを使用してコードを作成するにはどうすればいいですか?上記に渡された資格情報は現在ログインしているユーザーの資格情報です。

+0

問題はProjectContextを作成する方法です。私はProject Serverに慣れていないのでProjectContextです。しかし、SharePointアプリケーションでは、現在のユーザーを偽装するClientContextを作成する場合は、 'var clientContext = TokenHelper.GetS2SClientContextWithWindowsIdentity(hostUri、HttpContext.Current.Request.LogonUserIdentity); ' –

+0

こんにちはHristo、私は試していますファームソリューションを作成するため、私はTokenHelperクラスを持っていません。これはファームソリューション内で可能ではありませんか? – STORM

+0

こんにちは。それについてはわからない。しかし、次のことを考えてみましょう。CSOMの代わりにJSOMを使用するように、Webパーツコードを変更できますか?これにより、ブラウザで現在のユーザーの資格情報とともに実行されます。それ以外の場合は、ユーザーのなりすましを見なければならず、私の経験では決して簡単ではありません。 –

答えて

0

ファームソリューションはSharePointのコンテキストで実行されないため、ユーザー。 System.Security.Principal.WindowsIdentity.GetCurrent()にチェックを入れると、現在のIDはIIS内蔵のIUSRであることがわかります。これは、ClientContextが要求を発行するために使用するIDです。

SPSecurity.RunWithElevatedPrivileges()を使用してアクセス許可を昇格させると、コードはアプリプールIDで実行されます。場合によってはこれで十分ですが、すべてのユーザーがリソースにアクセスできるため、セキュリティで保護されていない可能性もあります。