2017-06-01 240 views
0

我正在編寫一個必須調用Sharepoint-online API的集成。我的集成不是一個Web應用程序,必須在沒有用戶在場的情況下工作。Sharepoint API無頭獲取訪問令牌

據我所知,我需要兩個設置步驟: 1.用戶必須登錄到Azure並設置應用程序並獲取客戶端ID。 2.我必須使用客戶端ID和用戶名和密碼來調用服務,然後我將獲得訪問令牌,刷新令牌和ID令牌

一旦兩個設置步驟完成,我就可以使用訪問令牌調用服務,但有時這會過期,我需要使用刷新令牌來獲得一個新的。

第2步對我來說似乎很奇怪。爲什麼不存在用戶可以登錄並獲取訪問刷新和ID令牌的用戶界面?有人建立了一個實用的網站,或者我誤解了某些東西?

感謝 羅伯特

+0

我開始調查https://developer.microsoft.com/zh-cn/ us/graph /作爲解決方案。 – Robert3452

回答

1

推薦的OAuth流爲服務和守護程序的應用程序客戶機憑證流(在流,有沒有刷新令牌參與;客戶端ID和客戶端密鑰是用於獲取最終到期的訪問令牌,然後您需要使用相同的客戶端ID和密碼獲取新的訪問令牌)。在SharePoint Online中的情況下,你有這種情況下2種選擇:

  • 的SharePoint Online + Azure的訪問控制服務(ACS)的集成。細節here。簡而言之,您可以在網站集級別創建服務主體(add in only policy) - 請按照鏈接的博客中的「創建AppPrincipal」部分進行操作。然後,您需要在應用程序清單中指定您的應用程序需要的特定權限。請參閱「給予應用程序主體權限」部分中的示例 - 同樣,您應該先定義what permissions your app needs。然後,您可以使用該服務主要從控制檯應用程序:

的Program.cs

  static void Main(string[] args) 
     { 
      Uri siteUri = new Uri("https://tenant.sharepoint.com/teams/test"); 
      //Get the realm for the URL 
      string realm = TokenHelper.GetRealmFromTargetUrl(siteUri); 

      //Get the access token for the URL. 
      // Requires this app to be registered with the tenant 
      string accessToken = TokenHelper.GetAppOnlyAccessToken(
       TokenHelper.SharePointPrincipal, 
       siteUri.Authority, realm).AccessToken; 

      HttpWebRequest endpointRequest = 
(HttpWebRequest)HttpWebRequest.Create(
"https://tenant.sharepoint.com/teams/test/_api/web/lists/GetByTitle('Documents')/items"); 
      endpointRequest.Method = "GET"; 
      endpointRequest.Accept = "application/json;odata=verbose"; 

      endpointRequest.Headers.Add("Authorization", "Bearer " + accessToken); 
      HttpWebResponse endpointResponse = 
      (HttpWebResponse)endpointRequest.GetResponse(); 


     } 
    } 

的app.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 
    <appSettings> 
    <add key="ClientId" value="65e674ca-3827-4134-852b-1196ff935e08"/> 
    <add key="ClientSecret" value="xxxxxxx"/> 
    </appSettings> 
</configuration> 
  • 的SharePoint Online + Azure中的Active Directory(AAD )整合。細節here。在那個鏈接中你會找到一個示例代碼。第一種方法的區別在於,在這一個中你不使用ACS而是使用AAD。應用程序需要的權限在AAD中定義 - 截至今天,據我所知,您可以在AAD中定義的應用程序權限不像您可以通過ACS定義的應用程序權限 - 即使用ACS,您可以在網站集級別定義應用程序,使用AAD您無法獲得租戶的全權限(即所有網站集)
+0

這看起來很有幫助。你指出的文章提到了一個叫做App Manifest的東西。我不寫一個Sharepoint應用程序,而是寫在我們的集成服務器上,所以清單位讓我感到困惑。 – Robert3452

+0

我只是添加更多信息到我的文章,希望它有幫助。 – andresm53