SharePoint アプリ専用のアクセスを許可するGranting access using SharePoint App-Only

SharePoint アプリ専用は古いものですが、依然として非常に有用な、アプリのプリンシパルの設定モデルです。SharePoint App-Only is the older, but still very relevant, model of setting up app-principals. このモデルは、SharePoint Online とオンプレミスの SharePoint 2013/2016 の両方で動作し、オンプレミスの SharePoint から SharePoint Online への移行するためのアプリケーションの準備に最適です。This model works for both SharePoint Online and SharePoint 2013/2016 on-premises and is ideal to prepare your applications for migration from SharePoint on-premises to SharePoint online. 以下の手順では、テナントのフル コントロールのアクセス許可でアプリのプリンシパルを設定する方法を示していますが、この方法で読み取りアクセス許可を付与することももちろん可能です。Below steps show how to setup an app principal with tenant full control permissions, but obviously you could also grant just read permissions using this approach.

重要

Azure Active Directory (Azure AD) のサービスである Azure アクセス制御 (ACS) は、2018 年 11 月 7 日に廃止されます。Azure Access Control (ACS), a service of Azure Active Directory (Azure AD), will be retired on November 7, 2018. SharePoint アドイン モデルでは、(この廃止の影響を受けない) https://accounts.accesscontrol.windows.net ホスト名を使用しているため、この廃止による影響はありません。This retirement does not impact the SharePoint Add-in model, which uses the https://accounts.accesscontrol.windows.net hostname (which is not impacted by this retirement). 詳細については、「SharePoint アドインに対する Azure アクセス制御の終了の影響」を参照してください。For more information, see Impact of Azure Access Control retirement for SharePoint Add-ins.

テナントのアクセス許可を持つアプリ専用プリンシパルの設定Setting up an app-only principal with tenant permissions

テナント内のサイト (例: https://contoso.sharepoint.com)) に移動して、appregnew.aspx ページ (例: https://contoso.sharepoint.com/_layouts/15/appregnew.aspx)) を呼び出します。Navigate to a site in your tenant (e.g. https://contoso.sharepoint.com) and then call the appregnew.aspx page (e.g. https://contoso.sharepoint.com/_layouts/15/appregnew.aspx). このページで、[生成] ボタンをクリックしてクライアント ID とクライアント シークレットを生成し、以下に示されているスクリーン ショットのように、残りの情報を入力します。In this page click on the Generate button to generate a client id and client secret and fill the remaining information like shown in the screen-shot below.

appregnew.aspx を使用する

重要

次の手順で必要になるため、取得した情報 (クライアント ID およびクライアント シークレット) を保存します。Store the retrieved information (client id and client secret) since you'll need this in the next step!

次の手順では、新しく作成されたプリンシパルにアクセス許可を付与します。Next step is granting permissions to the newly created principal. テナント スコープのアクセス許可を付与しようとしているので、この付与はテナント管理サイトの appinv.aspx ページを介してのみ行えます。Since we're granting tenant scoped permissions this granting can only be done via the appinv.aspx page on the tenant administration site. https://contoso-admin.sharepoint.com/_layouts/15/appinv.aspx を介してこのサイトに到達することができます。You can reach this site via https://contoso-admin.sharepoint.com/_layouts/15/appinv.aspx. ページが読み込まれたら、クライアント ID を追加して、作成されたプリンシパルを検索します。Once the page is loaded add your client id and look up the created principal:

appregnew.aspx を使用する

アクセス許可を付与するために、必要なアクセス許可を記述するアクセス許可 XML を提供する必要があります。To grant permissions, you'll need to provide the permission XML that describes the needed permissions. このアプリケーションは、すべてのサイトにアクセス可能である必要があるため、また、アプリ専用を使用した検索を行うため、以下のアクセス許可を必要とします。Since this application needs to be able to access all sites + also uses search with app-only it needs below permissions:

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
</AppPermissionRequests>

[作成] をクリックすると、アクセス許可の許諾ダイアログが表示されます。When you click on Create you'll be presented with a permission consent dialog. [信頼する] を押して、アクセス許可を付与します。Press Trust It to grant the permissions:

appregnew.aspx を使用する

重要

作成したクライアント ID とクライアント シークレットは、Administrator アカウントと同様、漏えいすることのないよう注意してください。Please safeguard the created client id/secret combination as would it be your administrator account. このクライアント ID とクライアント シークレットを使用して、SharePoint Online 環境のすべてのデータの読み取りおよび更新を行うことができます。Using this client id/secret one can read/update all data in your SharePoint Online environment!

準備作業が完了したら、次に進みましょう。次の章では、クライアント ID とクライアント シークレットの組み合わせで、作成したアプリ プリンシパルをどのように使用できるかを示します。With the preparation work done let's continue to the next chapter showing how you can use the created app principal via its client id and secret combination.

SharePoint の PnP サイト コア ライブラリを使用して、アプリケーションでこのプリンシパルを活用するUsing this principal in your application using the SharePoint PnP Sites Core library

まず、SharePoint の PnP サイト コア ライブラリの NuGet パッケージ (https://www.nuget.org/packages/SharePointPnPCoreOnline) を追加します。In a first step, you add the SharePoint PnP Sites Core library nuget package: https://www.nuget.org/packages/SharePointPnPCoreOnline. 完了したら、以下のコード コンストラクターを使用できます。Once that’s done you can use below code construct:

string siteUrl = "https://contoso.sharepoint.com/sites/demo";
using (var cc = new AuthenticationManager().GetAppOnlyAuthenticatedContext(siteUrl, "[Your Client ID]", "[Your Client Secret]"))
{
    cc.Load(cc.Web, p => p.Title);
    cc.ExecuteQuery();
    Console.WriteLine(cc.Web.Title);
};

PnP サイト コア ライブラリを使用せずに、アプリケーションでこのプリンシパルを活用するUsing this principal in your application without using the PnP Sites Core library

プリンシパルが作成され、許諾されたら、プリンシパルの ID およびシークレットを使用してアクセスを要求できます。Once the principal is created and consented you can use the principal's id and secret to request an access. TokenHelper.cs クラスは、アプリケーションの構成ファイルから ID とシークレットを把握します。The TokenHelper.cs class will grab the id and secret from the application's configuration file. using Microsoft.SharePoint.Client; using System;using Microsoft.SharePoint.Client; using System;

namespace AzureACSAuth
{
    class Program
    {
        static void Main(string[] args)
        {
            string siteUrl = "https://contoso.sharepoint.com/sites/demo";

            //Get the realm for the URL
            string realm = TokenHelper.GetRealmFromTargetUrl(new Uri(siteUrl));

            //Get the access token for the URL.  
            string accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, new Uri(siteUrl).Authority, realm).AccessToken;

            //Create a client context object based on the retrieved access token
            using (ClientContext cc = TokenHelper.GetClientContextWithAccessToken(siteUrl, accessToken))
            {
                cc.Load(cc.Web, p => p.Title);
                cc.ExecuteQuery();
                Console.WriteLine(cc.Web.Title);
            }
        }
    }
}

サンプルの app.config は、次のようになります。A sample app.config looks like this:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- Use AppRegNew.aspx and AppInv.aspx to register client id with secret -->
    <add key="ClientId" value="[Your Client ID]" />
    <add key="ClientSecret" value="[Your Client Secret]" />
  </appSettings>
</configuration>

注意

ソリューションに AppForSharePointOnlineWebToolkit NuGet パッケージを追加することで、TokenHelper.cs クラスをプロジェクトに簡単に挿入することができます。You can easily insert the TokenHelper.cs class in your project by adding the AppForSharePointOnlineWebToolkit nuget package to your solution.