2017-02-27 3 views
0

私はsharepoint REST APIを使用するデモアプリケーションを作成しています。ベアラトークンを(クライアントIDと証明書で)正常に取得できました。 AppはAzure ADに登録されており、チェックされているすべてのSharepoint権限があります。たとえば、すべてのリストを取得できますが、ファイルを取得できません。ブラウザで同じクエリが機能します。私はそれが許可の問題だと思う。このアプリをSPに登録する必要がありますか? https://tenant.sharepoint.com/IT/_layouts/15/appinv.aspx私は成功しなかったが、Azure ADのパーミッションで十分だと思う。私のGETクエリが返されますSharepoint - ADAL OAuth - ファイルが存在しません

{"error":{"code":"-2130575338, Microsoft.SharePoint.SPException","message":{"lang":"en-US","value":"The file /IT/vystupnidokumentydoc/filename.docx does not exist."}}} 

ユーザコンテキストでブラウザで同じクエリがOKです。

REST呼び出し:

private async static Task DoStuffInOffice365(string token) 
    { 
     HttpClient client = new HttpClient(); 
     client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); 
     client.DefaultRequestHeaders.Add("Accept", "application/json; odata = verbose"); 
     string url; 

     url = "https://tenant.sharepoint.com/_api/web/GetFileByServerRelativeUrl('/IT/vystupnidokumentydoc/filename.docx')"; 
     using (HttpResponseMessage response = await client.GetAsync(url)) 
     { 
      var contents = await response.Content.ReadAsStringAsync(); 

      if (!response.IsSuccessStatusCode) 
       Console.WriteLine("Fail!"); 
      else 
       Console.WriteLine("OK.");     
     } 
    } 

は、トークンを取得:エラーメッセージに基づいて

private async static Task<string> GetAccessToken() 
{ 
    //authentication context 
    string authority = "https://login.windows.net/tenant.onmicrosoft.com/"; 
    AuthenticationContext authenticationContext = new AuthenticationContext(authority, false); 

    var certPath = System.Reflection.Assembly.GetExecutingAssembly().Location; 
    certPath = certPath.Substring(0, certPath.LastIndexOf('\\')) + $"\\{CERT_FILE}"; 
    var certfile = System.IO.File.OpenRead(certPath); 
    var certificateBytes = new byte[certfile.Length]; 
    certfile.Read(certificateBytes, 0, (int)certfile.Length); 
    var cert = new X509Certificate2(
     certificateBytes, 
     PRIVATE_KEY_PASSWORD, 
     X509KeyStorageFlags.Exportable | 
     X509KeyStorageFlags.MachineKeySet | 
     X509KeyStorageFlags.PersistKeySet); 
    ClientAssertionCertificate cac = new ClientAssertionCertificate(CLIENT_ID, cert); 

    var authenticationResult = await authenticationContext.AcquireTokenAsync(P_URL, cac); 
    return token = authenticationResult.AccessToken; 
} 

答えて

0

、ファイルが提供された位置で見つかりませんでしたようです。ファイルがサイト上に存在することを確認してください。

このアプリをSPに登録する必要はありますか?

SharePointアドインを開発している場合は、はい。また、hereを参照して、SharePointアドインの認証/承認を行うこともできます。

SharePointアドインを開発していない場合は、Microsoft Graph-GetItemを使用してアイテムを取得し、this RESTでドライブアイテムをダウンロードすることもできます。

+0

ファイルが実際に存在します。私は同じURLのブラウザ(ユーザーコンテキスト)でそれを取得することができます。私は自分のアプリからリストや他のREST操作にアクセスできます。ファイルのみに問題があります。 –

関連する問題