次の方法で共有


SharePoint アプリケーションを Azure Access Control Service から Azure Active Directory にアップグレードする

SharePoint アドイン モデルを使用すると、アプリケーションを Azure Access Control Service (ACS) に登録して、SharePoint Online リソースへのアプリ専用アクセスを取得できます。 アプリのみのアクセスを構成する方法に応じて、読み取り専用からフル コントロールまで、さまざまなレベルのアクセス許可を付与できます。 「アプリケーション コンテキストを使用して SharePoint にアクセスする(アプリ専用とも呼ばれる)」、「SharePoint アプリ専用を使用してアクセスを許可する」の記事では、このような種類のアプリケーションを構成する方法に関する詳細なガイダンスを参照してください。

重要

Azure Active Directory (Azure AD) のサービスである Azure Access Control (ACS) は、2018 年 11 月 7 日に廃止されます。 SharePoint アドイン モデルでは、(この廃止の影響を受けない) https://accounts.accesscontrol.windows.net ホスト名を使用しているため、この廃止による影響はありません。 詳細については、「SharePoint アドインの Azure Access Control廃止の影響」を参照してください。新しいテナントの場合、ACS アプリ専用アクセス トークンを使用するアプリは既定で無効になっています。 最新で安全性の高い Azure AD アプリ専用モデルを使用することをお勧めします。

重要

この記事では、いわゆる PnP コンポーネント、サンプル、ツールを参照します。これは、サポートを提供するアクティブなコミュニティによってサポートされるオープンソース資産です。 公式の Microsoft サポート チャネルのオープン ソース ツールのサポート用 SLA ではありません。 ただし、これらのコンポーネントまたはサンプルは、Microsoft でサポートされているすぐに使用できる API と機能を使用しています。

ただし、SharePoint アドイン モデルは古いモデルであり、SharePoint Frameworkなど、より新しく、よりモダンで汎用性の高い開発モデルがあります。 さらに、技術的な観点から見ると、SharePoint アドイン モデルに登録されているアプリ専用アプリケーションに付与されたアクセス許可はテナント全体にアクセスでき、アクセス許可を付与するターゲット サイト コレクションを選択的に選択することはできません。

適切でより安全な代替手段として、最終的には、テナント全体ではなく、特定のサイト コレクションのみを対象とするために、「 Microsoft Graph と SharePoint Online のリソース固有の同意について」で説明されているリソース固有の同意 (RSC) モデルを使用して、Azure Active Directory (Azure AD) にアプリケーションを登録することに依存できます。

この記事では、Azure AD アプリケーション登録モデルのしくみ、および SharePoint アドイン モデルで ACS に登録されている既存のアプリケーションを Azure AD モデルにアップグレードする方法について詳しく説明します。

必要に応じて、記事全体を読む代わりに、次のビデオをwatchできます。これは、より詳細なリファレンスと見なすことができます。

SharePoint アプリを Azure Access Control サービスから Azure Active Directory にアップグレードする

ACS から Azure AD へのアップグレード

このセクションでは、SharePoint アドイン モデルと ACS を使用して、SharePoint Online にアプリ専用アプリケーションが既に登録されていることを前提としています。

移行元のアプリケーション

次のスクリーンショットでは、ターゲット テナントの URL を使用して https://[your-tenant].sharepoint.com/_layouts/15/appregnew.aspx 、ACS に登録されているアプリケーションのサンプル構成を確認できます。

アプリケーションを ACS に登録するためのフォーム フィールドを含む [アプリケーション登録] ページ。フィールドは、クライアント ID、クライアント シークレット、タイトル、アプリ ドメイン、リダイレクト URI です。

アプリケーションには、SharePoint Online 管理 Central の URL を介して登録された次のポリシーを使用してhttps://[your-tenant]-admin.sharepoint.com/_layouts/15/appinv.aspx、ターゲット SharePoint Online テナントに FullControl 権限が付与されました。

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

次のスクリーンショットでは、アプリケーションにフル コントロールのアクセス許可を付与するために使用される UI 設定を確認できます。

ACS でアプリケーションにアクセス許可を付与するフォーム フィールドを含む [アプリケーション インベントリ] ページ。フィールドは、アプリ ID、アプリ ID でアプリを検索するルックアップ ボタン、アプリケーションに関する情報フィールド、アプリケーションに付与するアクセス許可を定義するためのアプリのアクセス許可要求 XML です。

また、SharePoint ライブラリのアイテムを読み書きするために、対象の SharePoint Online サイト コレクションにアクセスすることを前提とします。

.NET 6 コンソール アプリケーションから取得した次のコード抜粋では、オープンソース NuGet パッケージとして使用できる PnP Framework ライブラリを使用して、ターゲット SharePoint Online テナントにアクセスする方法を確認できます。

// Use the PnP Framework AuthenticationManager class to get access to SharePoint Online
var am = new AuthenticationManager();

using (var context = am.GetACSAppOnlyContext(settings.SiteUrl, settings.ClientId, settings.ClientSecret))
{
    // Read the target library title
    var targetLibrary = context.Web.Lists.GetByTitle(settings.ListTitle);
    context.Load(targetLibrary, l => l.Title);
    await context.ExecuteQueryAsync();

    Console.WriteLine($"The title of the library is: \"{targetLibrary.Title}\"");

    // Add a new document to the target library
    using (var fileContent = new MemoryStream())
    {
        // Create some random text content
        var randomContent = Encoding.UTF8.GetBytes($"Some random content {DateTime.Now}");
        fileContent.Write(randomContent, 0, randomContent.Length);
        fileContent.Position = 0;

        // Upload the content as a random name file
        await targetLibrary.RootFolder.UploadFileAsync($"{Guid.NewGuid().ToString("n")}.txt", fileContent, true);
    }
}

コードの抜粋では、ターゲット ライブラリのタイトルを読み取り、アプリ専用で SharePoint Online を使用する架空のカスタム ロジックを示すためだけに、新しいテキスト ファイルをターゲット ライブラリにアップロードします。

注:

このコード サンプルは、SharePoint Online へのアクセスを容易にするために PnP Framework ライブラリに依存しています。 ただし、最終的には SharePoint Online クライアント側オブジェクト モデル (CSOM) のみを使用できます。 PnP Framework ライブラリの目的は、開発プロセスを高速化し、開発者の生活の質を向上させるだけです。

Azure AD での新しいアプリケーションの登録

ACS 登録済みアプリケーションがあるため、最新の Azure AD アプリケーションに変換する方法を見てみましょう。

まず、アプリケーションを Azure AD に登録する必要があります。 次に、アプリケーションの認証を構成する必要があります。 最後に、SharePoint Online にアクセスするためにアプリケーションに付与するアクセス許可を構成する必要があります。

セキュリティ上の理由から、Azure AD 登録済みアプリケーションを介してアプリ専用モードで SharePoint Online にアクセスするには、アプリケーション認証用の証明書と X.509 証明書を作成して構成する必要もあります。

以降のセクションでは、自動アプローチまたは手動で Azure AD アプリケーションの登録を続行する方法について説明します。

PnP PowerShell を使用して Azure AD に新しいアプリケーションを自動的に登録する

アプリ専用モードで SharePoint Online にアクセスするために Azure AD アプリケーションを登録する最も高速で簡単な方法は、 PnP PowerShell に依存することです。

注:

PnP PowerShell はオープン ソース ソリューションであり、アクティブなコミュニティでサポートが提供されています。 Microsoft からのオープン ソース ツールのサポート SLA はありません。

実際には、 Register-PnPAzureADApp コマンドレットがあり、1 行のコードだけですべての登録手順を実行できます。 次のコードの抜粋では、これを行うための PowerShell スクリプトを確認できます。

$app = Register-PnPAzureADApp -ApplicationName "Here the name of your application" -Store CurrentUser -Tenant yourtenant.onmicrosoft.com -Username "your-username" -Password (Read-Host -AsSecureString -Prompt "Enter Password") -CertificatePassword (Read-Host -AsSecureString -Prompt "Enter Certificate Password") -OutPath .\

$app.'AzureAppId/ClientId'
$app.'Certificate Thumbprint'

コマンドレットは、次の手順を実行します。

  • Azure AD にアプリケーションを登録します
  • アプリケーション認証用の X.509 証明書を作成します
  • は、現在のユーザー証明書ストアに、秘密キーを使用して証明書をインポートします
  • は をエクスポートします。PFX と 。 OutPath 引数で指定されたフォルダー内の証明書の CER ファイル
  • 証明書の公開キーを Azure AD にアップロードして、アプリケーション認証用に証明書を構成します
  • Azure AD でアプリケーションの定義済みのアクセス許可セットを構成します

上記のスクリプトは、アプリケーションのクライアント ID と自動生成された証明書の拇印を出力します。

プロセス全体の間に、アプリケーションにアクセス許可を付与するためのプロンプト ダイアログが表示されます。 次の scree-shot では、コマンドレットによってアプリケーションに自動的に付与されるアクセス許可を確認できます。

PnP PowerShell コマンドレットによって登録されたアプリケーションに付与されるアクセス許可。Microsoft Graph のアプリケーションのアクセス許可は、Group.ReadWrite.All、User.ReadWrite.All です。SharePoint Online のアプリケーションのアクセス許可は、Sites.FullControl.All、User.ReadWrite.All です。

Register-PnPAzureADApp コマンドレットの動作を構成するためのオプションは多数あります。 たとえば、 GraphApplicationPermissions 引数と SharePointApplicationPermissions 引数を使用して、アプリケーションに付与するアクセス許可をカスタマイズできます。

手動プロセスに関心がない場合は、「 Azure AD 登録済みアプリケーションを介してアプリ専用モードで SharePoint Online を使用する」 セクションに移動して、新しく登録した Azure AD アプリケーションで SharePoint Online を使用する方法を確認できます。

Azure AD で新しいアプリケーションを手動で登録する

Azure AD アプリケーションを自動的に登録する PnP PowerShell コマンドレットは強力です。 ただし、プロセスをより詳細に制御するシナリオがあります。 このようなシナリオでは、Azure AD で新しいアプリケーションを手動で登録できます。 前に示したのと同じ結果を得るには、 に移動してブラウザーを開く https://aad.portal.azure.com/必要があります。 左側のタブで [Azure Active Directory] を選択して Azure AD ブレードをアクティブ化し、Azure AD ブレードの左側のメニューで使用可能なセクションの一覧で [アプリの登録] を選択します。 次のスクリーンショットでは、このようなシナリオの Azure AD ブレードのユーザー インターフェイスを確認できます。

[アプリの登録] セクションが highligted の Azure AD ブレード。登録されたアプリケーションの一覧があり、[新しい登録] ボタンをクリックして新しいアプリケーションを追加できます。

手動のアプリケーション登録プロセスを開始するには、[ 新しい登録 ] ボタンを選択します。 次のスクリーンショットでは、新しいアプリケーションを登録するためのフォームを確認できます。

新しいアプリケーションを登録するフォーム。入力するフィールドは、名前、サポートされているアカウントの種類 (シングルテナント、マルチテナント、マルチテナント、Microsoft 個人用アカウント、Microsoft 個人用アカウントのみ)、アプリケーションのオプションのリダイレクト URI です。

新しいアプリケーションの名前を指定する必要があります。 次に、サポートするアカウントを選択する必要があります。 使用可能なオプションは次のとおりです。

  • この組織ディレクトリ内のアカウントのみ: アプリケーションは 1 つのテナント (つまり、シングルテナント) を対象としています。
  • 任意の組織ディレクトリ内のアカウント: アプリケーションは、任意のテナント (つまりマルチテナント) を対象としています。
  • 任意の組織のディレクトリ内のアカウントと個人用 Microsoft アカウント: アプリケーションはマルチテナントであり、個人の Microsoft アカウント (Skype、Xbox など) をサポートします。
  • 個人用 Microsoft アカウントのみ: アプリケーションは、個人の Microsoft アカウント (Skype、Xbox など) をサポートします。

現在のシナリオでは、シングルテナントまたはマルチテナントのオプションを選択できます。 シングルテナント 1 に進みましょう。

[ 登録 ] ボタンを選択し、実際のアプリケーションを登録します。 これで、登録されたアプリケーションに関する有用な情報のセットを含むページが表示されます。 ページは次のスクリーンショットで確認できます。

名前、クライアント ID、オブジェクト ID、テナント ID などの登録済みアプリ情報ページ。

アプリケーションの X.509 証明書の構成

任意のツールを使用して、アプリケーションの X.509 証明書を手動で作成できます。 ただし、Azure AD 認証用の X.509 証明書を作成する最も簡単で最速の方法は、 PnP PowerShell と特に New-PnPAzureCertificate コマンドレットに依存するもう 1 つの時間です。 新しい X.509 証明書を作成するための PowerShell 構文の例を次に示します。

$cert = New-PnPAzureCertificate -CommonName "my-certificate-common-name" -OutPfx .\my-certificate.pfx -OutCert .\my-certificate.cer -ValidYears 2 -CertificatePassword (Read-Host -AsSecureString -Prompt "Enter Certificate Password")

$cert.Thumbprint

上記のスクリプトは、新しい X.509 証明書を作成し、その を格納します。PFX と 。指定されたファイル パス内の CER ファイル。 次に、生成された証明書の拇印を出力します。

注:

ローカル開発マシンから生成された証明書を使用する場合は、生成された をインポートする必要があります。PFX ファイル (秘密キーを含む) をローカル証明書ストアに格納します。 この手順は、開発用コンピューターのオペレーティング システムによって異なる場合があります。 自動プロセスを使用した場合、証明書は現在のユーザー証明書ストアに自動的にインポートされます。

これで、証明書を Azure AD にアップロードする準備ができました。 アプリケーション情報が表示されている Azure AD Web ページに戻るし、アプリケーション ページの左側にある [証明書 & シークレット] メニューを選択します。 ページで [ 証明書 ] タブを選択し、[ 証明書のアップロード ] を選択して をアップロードします。そこから CER ファイル。 次のスクリーンショットでは、X.509 証明書をアップロードするときの Azure AD ポータル UI の外観を確認できます。

Azure AD アプリケーションの X.509 証明書をアップロードするインターフェイス。右側に [証明書のアップロード] ボタンとアップロード パネルがあり、 を指定する必要があります。CER 証明書ファイル パスと、証明書の説明 (省略可能)。[追加] ボタンをクリックして証明書をアップロードします。

アプリケーションへのアクセス許可の付与

これで、アプリケーションにアクセス許可を付与する準備ができました。 画面の左側にある [API のアクセス許可] メニューを選択し、[ アクセス許可の追加 ] コマンドを選択するだけです。 次のスクリーンショットでは、ユーザー インターフェイスの外観を確認できます。

Azure AD アプリケーションにアクセス許可を追加するインターフェイス。[アクセス許可の追加] ボタンをクリックすると、新しいアクセス許可の追加を開始できます。

追加するアクセス許可を選択できる複数ステップ ウィザードによってメッセージが表示されます。 SharePoint Online にアクセスするには、ターゲット API として Microsoft Graph または SharePoint を選択できます。 この記事では、SharePoint へのアプリ専用アクセス用にアプリケーションを構成する方法について説明しているので、アプリケーションのアクセス 許可の種類のアクセス許可を追加することを選択する必要があります。 最後に、追加するアクセス許可を選択する必要があります。

この執筆時点では、現在のシナリオで使用できるアプリケーションのアクセス許可を次の一覧に示します。

  • Microsoft Graph
    • アプリケーションのアクセス許可:
      • Sites.FullControl.All: すべてのサイト コレクションを完全に制御する
      • Sites.Manage.All: すべてのサイト コレクション内のアイテムとリストを作成、編集、削除します
      • Sites.Read.All: すべてのサイト コレクション内のアイテムを読み取ります
      • Sites.ReadWrite.All: すべてのサイト コレクション内のアイテムの読み取りと書き込み
      • Sites.Select: 選択したサイト コレクションにアクセスします ( 「Microsoft Graph と SharePoint Online のリソース固有の同意について」の記事で説明されています)
  • SharePoint
    • アプリケーションのアクセス許可:
      • Sites.FullControl.All: すべてのサイト コレクションを完全に制御する
      • Sites.Manage.All: すべてのサイト コレクション内のアイテムとリストの読み取りと書き込み
      • Sites.Read.All: すべてのサイト コレクション内のアイテムを読み取ります
      • Sites.ReadWrite.All: すべてのサイト コレクション内のアイテムの読み取りと書き込み
      • Sites.Selected: 選択したサイト コレクションにアクセスします ( 「Microsoft Graph と SharePoint Online のリソース固有の同意について」の記事で説明されています)
      • TermStore.Read.All: マネージド メタデータの読み取り
      • TermStore.ReadWrite.All: マネージド メタデータの読み取りと書き込み
      • User.Read.All: ユーザー プロファイルの読み取り
      • User.ReadWrite.All: ユーザー プロファイルの読み取りと書き込み

ご覧のように、選択できるオプションは多数あり、目標に応じて、Microsoft Graph を使用できます。これは常に主な選択である必要があります。または、代わりに SharePoint Online REST API を使用することもできます。 実際に実行する必要がある内容に応じて、両方を同じアプリケーション内で使用することもできます。

例を作成するために、次のアクセス許可を追加しましょう。

  • Microsoft Graph
    • アプリケーションのアクセス許可:
      • Sites.ReadWrite.All
  • SharePoint
    • アプリケーションのアクセス許可:
      • Sites.ReadWrite.All

Azure AD でアプリケーションにアクセス許可を追加したら、それらのアクセス許可を明示的に付与することが必要になる場合があります。 アクセス許可の一覧には、 "状態 " という名前の列が表示され、オレンジ色の感嘆符が付いた [テナントの名前] に値が付与されていない場合は、次のスクリーンショットに示すように、[テナント の名前] に管理者の同意を 付与するボタンを選択する必要があります。

Azure AD アプリケーションのアクセス許可に同意を付与するインターフェイス。[管理者の同意を与える] をクリックできます。ボタンをクリックし、アプリケーションにアクセス許可を付与します。

同意を付与すると、アクセス許可の [状態] 列の値が "[テナントの名前] に付与されます" になり、緑色のチェックマークが表示されます。

Azure AD 登録済みアプリケーションを使用したアプリ専用モードでの SharePoint Online の使用

これで、新しく登録した Azure AD アプリケーションを使用して SharePoint Online を使用する準備ができました。

注:

開発用コンピューターからローカルで使用する場合は、生成された証明書を証明書ストアにインストールする必要があります。 PnP PowerShell 経由で自動登録を使用した場合、証明書は既に登録されています。 手動プロセスを使用した場合は、現在のユーザー証明書ストアに証明書を手動でインポートする必要があります。

.NET 6 コンソール アプリケーションから取得した次のコード抜粋では、 PnP Framework ライブラリを使用してターゲット SharePoint Online テナントにアクセスする方法を確認できます。

// Use the PnP Framework AuthenticationManager class to get access to SharePoint Online
var certificate = X509CertificateUtility.LoadCertificate(StoreName.My, StoreLocation.CurrentUser, settings.CertificateThumbprint);
var am = AuthenticationManager.CreateWithCertificate(settings.ClientId, certificate, settings.TenantId);

using (var context = am.GetContext(settings.SiteUrl))
{
    // Read the target library title
    var targetLibrary = context.Web.Lists.GetByTitle(settings.ListTitle);
    context.Load(targetLibrary, l => l.Title);
    await context.ExecuteQueryAsync();

    Console.WriteLine($"The title of the library is: \"{targetLibrary.Title}\"");

    // Add a new document to the target library
    using (var fileContent = new MemoryStream())
    {
        // Create some random text content
        var randomContent = Encoding.UTF8.GetBytes($"Some random content {DateTime.Now}");
        fileContent.Write(randomContent, 0, randomContent.Length);
        fileContent.Position = 0;

        // Upload the content as a random name file
        await targetLibrary.RootFolder.UploadFileAsync($"{Guid.NewGuid().ToString("n")}.txt", fileContent, true);
    }
}

前のサンプルと同様に、コードの抜粋はターゲット ライブラリのタイトルを読み取り、新しいテキスト ファイルをターゲット ライブラリにアップロードします。 ご覧のとおり、コードは前のサンプルとほぼ同じように見えます。 ただし、後者のサンプルでは、Azure AD 登録済みアプリケーションを使用しており、認証のために X.509 証明書を参照しています。 それ以外に、引き続き PnP Framework ライブラリと CSOM 構文を使用して SharePoint Online にアクセスしています。 この新しいアプローチにより、アプリケーションのアクセス許可に対してより高いレベルのカスタマイズが可能になり、ACS を使用しなくなりました。

このトピックに関する追加情報については、次のドキュメントを参照してください。