2017-06-01 6 views
0

私は、Sharepoint-online APIを呼び出す必要がある統合をコーディングしています。私の統合はWebアプリケーションではなく、ユーザーがいなくても動作しなければならない。Sharepoint APIヘッドレスアクセストークンの入手

2つの設定ステップが必要です。 1.ユーザーはAzureにログインし、アプリケーションを設定してクライアントIDを取得する必要があります。 2.クライアントIDとユーザー名とパスワードでサービスを呼び出す必要があります。次に、アクセストークン、リフレッシュトークン、IDトークンを取得します。

2つのセットアップ手順が完了したら、アクセストークンしかし時にはこれは期限が切れるので、リフレッシュトークンを使用して新しいトークンを取得する必要があります。

ステップ2は私にとって奇妙なようです。ユーザーがログインしてアクセス・リフレッシュとIDトークンを取得できるユーザー・インターフェースがないのはなぜですか?誰かがこれを行うユーティリティWebサイトを作ったのですか、何かを間違って理解していませんか?

おかげ ロバート

+0

私は調査を開始していますhttps://developer.microsoft.com/en-私たち/グラフ/これに対する解決策として。 – Robert3452

答えて

1

サービスやデーモンのアプリケーションための推奨OAuthのフローがそのフローでクライアント資格フロー(、を関与なしリフレッシュトークンであり、クライアントIDとクライアントの秘密はあります最終的に期限切れになるアクセストークンを取得するために使用され、同じクライアントIDとシークレットを使用して新しいアクセストークンを取得する必要があります)。

  • SharePoint Onlineの+ Azureのアクセス・コントロール・サービス(ACS)の統合:SharePoint Onlineのの場合、あなたは、このシナリオのための2つのオプションがあります。詳細here。つまり、サイトコレクションレベルなどでサービスプリンシパル(add in only policy)を作成します。これについては、リンク先のブログの「AppPrincipalの作成」を参照してください。次に、アプリケーションで必要となる特定の権限をアプリケーションマニフェストに割り当てる必要があります。 「App Principal Permissionの付与」セクションのサンプルを参照してください。再度、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。そのリンクにサンプルコードがあります。最初のアプローチの違いは、この1つでは、ACSではなくAADを使用していることです。アプリケーションが必要とするアクセス許可はAADで定義されています。現在までのところ私が知る限り、アプリケーションのアクセス許可はACSで定義できるものほど細かくはありませんAADを使用してアプリケーションをサイトコレクションレベルで定義すると、アプリケーションにテナント全体のアクセス許可(つまり、すべてのサイトコレクション)がありません(つまり、すべてのサイトコレクション)
+0

これは役に立ちそうです。あなたが指摘した記事には、App Manifestというものがあります。私はSharepoint Appを書くのではなく、私が書いているものが統合サーバ上で動いて、マニフェストのビットが私を混乱させている。 – Robert3452

+0

私は自分の投稿にもっと多くの情報を追加しました。 – andresm53

関連する問題