複数地域機能のサンプル アプリケーションをセットアップする

複数地域テナント用の開発にあたっては、セキュリティ モデルを理解しておくことが重要です。 複数地域テナントで使用されるモデルは、通常のテナントで使用されるモデルと同じです。

この記事では、次のサンプル アプリケーションを構成する方法を説明します。

Graph API を使用した、すべてのユーザー プロファイルの読み取りと更新

SharePoint の複数地域テナントのユーザー プロファイルを操作する」で説明されているように、ユーザー プロファイル プロパティの読み取りと更新に使用する推奨モデルは Graph API です。 このセクションでは、テナント全体でユーザー プロファイルを読み取りおよび更新できるようにするために、アプリケーションに付与する必要のあるアクセス許可について説明します。

Azure AD で定義されたアプリケーションへ付与可能なアクセス許可の長いリストはありますが、プロファイルを操作するには、アクセス許可を以下のように制限することができます。

アクセス許可 説明 管理者の許諾が必要
User.ReadWrite.All アプリケーションのアクセス許可 サインインしているユーザーなしで、アプリで組織内の他のユーザーのプロファイル プロパティ、グループ メンバーシップ、部下、上司の完全なセットを読み書きできるようにします。

また、アプリで非管理ユーザーの作成と削除もできるようにします。

ユーザーのパスワードのリセットはできません。
はい
Sites.ReadWrite.All アプリケーションのアクセス許可 アプリが、サインインしているユーザーなしで、すべてのサイト コレクション内のドキュメントを読み取り、書き込み、アイテムを一覧表示できるようにします。

このアクセス許可は、アプリケーションがユーザーの個人用サイトの場所を取得する場合にのみ必要とされます (例: https://graph.microsoft.com/v1.0/users/UserB@contoso.onmicrosoft.com?$select=mySite)。
はい

Microsoft Graph をベースとする複数地域機能のサンプルは、Microsoft 認証ライブラリ (MSAL) を使用して、v2 エンドポイントで Microsoft Graph に接続します。 v1 エンドポイントを使用して接続する ADAL に対し、MSAL では、Microsoft アカウント、Azure AD、Azure AD B2C を使用した Microsoft Graph への接続を許可します。 次の指示は、v2 エンドポイントを使用するようアプリケーションをセットアップするのに役立ちますが、v1 エンドポイントに基づく「古い」手法を使用することもできます。

アプリケーションを登録する

  1. Microsoft Graph に対してアプリケーションのアクセス許可を使用するには、アプリケーションを https://apps.dev.microsoft.com に登録する必要があります。

  2. ログインしたら、[アプリの追加] を選択し、[新規の Converged アプリケーションを追加] を選択します。

  3. アプリケーションの名前を指定し、[アプリケーションの作成] を選択します。

  4. [アプリケーションの構成] 画面が表示されます。

Azure AD でアプリケーションを登録する

  1. 新しいパスワードを生成し、アプリケーション ID と併せてそれを書き留めます。

  2. [プラットフォームの追加] を選択します。その後、このアプリケーションにはランディング ページがないので、プラットフォーム ターゲットとして [ネイティブ アプリケーション] を選択します。

Azure AD でアプリケーションを構成する (パート 1)

  1. 必要な [アプリケーション アクセス許可] を追加します。 このサンプル アプリでは、Sites.ReadWrite.All および User.ReadWrite.All のアプリケーション アクセス許可を追加しています。

  2. [Live SDK のサポート] チェック ボックスをオフにします。

Azure AD でアプリケーションを構成する (パート 2)

  1. 変更を保存します。
  1. このサンプルでは、User.ReadWrite.All および Sites.ReadWrite.All のアプリケーション アクセス許可は、使用前にテナント管理者の許諾を得る必要があります。 次のような許諾 URL を作成します。
https://login.microsoftonline.com/<tenant>/adminconsent?client_id=<clientid>&state=<something>
  1. 登録されたアプリからクライアント ID を使用し、自分のテナント contoso.onmicrosoft.com からアプリを許諾する場合、URL は次のようになります。
https://login.microsoftonline.com/contoso.onmicrosoft.com/adminconsent?client_id=6e4433ca-7011-4a11-85b6-1195b0114fea&state=12345
  1. 作成した URL へ移動し、テナント管理者としてログインして、アプリケーションを許諾します。 アプリケーションの名前と、構成したアクセス許可スコープが許諾画面に表示されます。

Azure AD アプリケーションに対するテナントの許諾

CSOM ユーザー プロファイル API を使用した、すべてのユーザー プロファイルの読み取りと更新

CSOM API を使用してプロファイル プロパティを操作する場合、作成されたカスタム プロパティに対してのみこの操作を行います。なぜなら、すぐに使用できるプロパティは、Microsoft Graph API の方がより上手く処理できるからです。 詳細については、「SharePoint の複数地域テナントのユーザー プロファイルを操作する」をご覧ください。

アクセス許可の観点からすると、次の 2 つのモードがあります。

  • ユーザー資格情報を使用する

    この場合、テナント管理者 URL と SharePoint Online 管理者資格情報を使用して、ClientContext オブジェクトを設定する必要があります。 ただ 1 つだけの Azure AD インスタンスがユーザーを保持しているということは、SharePoint Online の管理者がすべての地理的位置の管理者でもあることを意味します。

    string tenantAdminSiteForMyGeoLocation = "https://contoso-europe-admin.sharepoint.com";
    
    using (ClientContext cc = new ClientContext(tenantAdminSiteForMyGeoLocation))
    {
        SecureString securePassword = GetSecurePassword("password");
        cc.Credentials = new SharePointOnlineCredentials("admin@contoso.onmicrosoft.com", securePassword);
    
        // user profile logic
    }
    
    static SecureString GetSecurePassword(string Password)
    {
        SecureString sPassword = new SecureString();
        foreach (char c in Password.ToCharArray()) sPassword.AppendChar(c);
        return sPassword;
    }
    
  • アプリ専用プリンシパルを使用する

    アプリ専用を使用するときには、作成されたアプリ プリンシパルに、http://sharepoint/social/tenant アクセス許可スコープのフル コントロールの権利を与える必要があります。

以下に、appregnew.aspx および appinv.aspx を使用してアプリ プリンシパルを登録し、許諾する方法を示します。

プリンシパルを作成する

  1. テナント内のサイト (例: https://contoso.sharepoint.com) に移動して、appregnew.aspx ページ (例: https://contoso.sharepoint.com/_layouts/15/appregnew.aspx) を呼び出します。

  2. このページで、[生成] ボタンを選択して、クライアント ID とクライアント シークレットを生成します。

  3. 残りのフィールドに、次のように情報を入力します。

  • 役職: Multi-Geo demo
  • アプリ ドメイン: www.localhost.com
  • リダイレクト URI: https://www.localhost.com

ACS アプリ プリンシパルを登録する

注:

次の手順で必要になるため、取得した情報 (クライアント ID およびクライアント シークレット) を保存します。

重要

SharePoint Online 用の Azure ACS (Access Control Services) の使用は、2023 年 11 月 27 日の時点で廃止されました。詳細については、完全な廃止のお知らせをご覧ください。 SharePoint のコンテキストの外部で Azure ACS を使用することは、2018 年 11 月 7 日に既に廃止されており、現在は終了です。

廃止とは、機能が新しい投資を受け取ることを意味しますが、まだサポートされています。 有効期間が終了すると、この機能は廃止され、使用できなくなります。

作成されたプリンシパルにアクセス許可を付与する

次の手順では、新しく作成されたプリンシパルにアクセス許可を付与します。 テナント スコープのアクセス許可を付与しようとしているので、この付与はテナント管理サイトの appinv.aspx ページを介してのみ行えます。

  1. https://contoso-admin.sharepoint.com/_layouts/15/appinv.aspx を介してこのサイトに到達することができます。

  2. ページが読み込まれたら、クライアント ID を追加して、作成されたプリンシパルを検索します。

アプリ プリンシパルにアクセス許可を付与する

  1. アクセス許可を付与するために、必要なアクセス許可を記述するアクセス許可 XML を提供する必要があります。 UI エクスペリエンス スキャナーは、すべてのサイトにアクセスできなければならず、またアプリ専用を使用した検索を使用するため、以下のアクセス許可を必要とします。
<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/social/tenant" Right="FullControl" />
</AppPermissionRequests>
  1. [作成] を選択すると、アクセス許可の許諾ダイアログが表示されます。 [信頼する] を選択して、アクセス許可を付与します。

アプリ プリンシパルを許諾する

コード内でプリンシパルを使用する

プリンシパルが作成され、許諾されたら、プリンシパルの ID およびシークレットを使用してアクセスを要求できます。 TokenHelper.cs クラスは、アプリケーションの構成ファイルから ID とシークレットを把握します。

string tenantAdminSiteForMyGeoLocation = "https://contoso-europe-admin.sharepoint.com";

//Get the realm for the URL.
string realm = TokenHelper.GetRealmFromTargetUrl(siteUri);

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

//Create a client context object based on the retrieved access token.
using (ClientContext cc = TokenHelper.GetClientContextWithAccessToken(tenantAdminSiteForMyGeoLocation, accessToken))
{
    // user profile logic
}

サンプルの app.config は、次のようになります。

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

注:

[AppForSharePointOnlineWebToolkit] (https://www.nuget.org/packages/AppForSharePointOnlineWebToolkit/) NuGet パッケージをソリューションに追加することで、プロジェクトにクラスを簡単に挿入TokenHelper.csできます。

複数地域構成を検出する

複数地域テナントの地理的位置を検出するのに使用できる、サポートされている唯一の API は、Graph API です。 このセクションでは、複数地域情報を検出するために、アプリケーションに付与する必要のあるアクセス許可について説明します。

Azure AD で定義されたアプリケーションへ付与可能なアクセス許可の長いリストはありますが、複数地域テナントの構成情報を読み込むには、アクセス許可を以下のように制限することができます。

アクセス許可 説明 管理者の許諾が必要
Sites.ReadWrite.All アプリケーションのアクセス許可 アプリが、サインインしているユーザーなしで、すべてのサイト コレクション内のドキュメントを読み取り、書き込み、アイテムを一覧表示できるようにします。 はい

アプリケーションがすべてのユーザーのプロファイルを読み取り、更新できるようになる必要がある」セクションで説明されている、Azure AD アプリケーションの作成手順を使用します。

サイト コレクションを作成および削除し、テナント サイト コレクションのプロパティを設定する

Microsoft Graph API を使用する

Microsoft Graph API を使用してグループ サイト (モダン チーム サイトとも呼ばれる) を作成する方法の詳細については、「マルチ地理的サイト」の記事に説明されています。 このセクションでは、アクセス許可についてのみ取り上げます。 必要とされるアクセス許可の一覧を、以下の表に示します。

アクセス許可 説明 管理者の許諾が必要
Group.ReadWrite.All アプリケーションのアクセス許可 アプリが、グループの作成、グループ メンバーシップの読み取りと更新、グループの削除ができるようにします。

これらの操作はすべて、サインインしているユーザーなしで、アプリで実行できます。

すべてのグループ API が、アプリ専用のアクセス許可を使用したアクセスをサポートするわけではないことに注意してください。
はい

Microsoft Graph をベースとする複数地域機能のサンプルは、Microsoft 認証ライブラリ (MSAL) を使用して、v2 エンドポイントで Microsoft Graph に接続します。 v1 エンドポイントを使用して接続する ADAL に対し、MSAL では、Microsoft アカウント、Azure AD、Azure AD B2C を使用した Microsoft Graph への接続を許可します。

アプリケーションがすべてのユーザーのプロファイルを読み取り、更新できるようになる必要がある」セクションで説明されている、Azure AD アプリケーションの作成手順を使用します。

CSOM テナント API を使用する

CSOM テナント API の使用方法は、前述の CSOM ガイダンスにある説明内容と非常によく似ています。実際、ユーザー資格情報を使用するためのガイダンスは同じです。 アプリ専用プリンシパルを使用する場合、手順は同じですが、異なるアクセス許可 (テナント、およびフル コントロール) を付与する必要があります。

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

関連項目