複数地域機能のサンプル アプリケーションをセットアップするSet up a Multi-Geo sample application

重要

OneDrive for Business Multi-Geo は提供されています。SharePoint Online Multi-Geo は現在プレビュー段階であり、変更される可能性があります。OneDrive and SharePoint Online Multi-Geo is currently in preview and is subject to change.

複数地域テナント用の開発にあたっては、セキュリティ モデルを理解しておくことが重要です。When developing for a Multi-Geo tenant, it's important to understand the security model. 複数地域テナントで使用されるモデルは、通常のテナントで使用されるモデルと同じです。Fortunately, the model used for a Multi-Geo tenant is the same as the model used for a regular tenant.

この記事では、次のサンプル アプリケーションを構成する方法を説明します。This article shows you how to configure the following sample applications:

Graph API を使用した、すべてのユーザー プロファイルの読み取りと更新Read and update profiles for all users using the Graph API

SharePoint の複数地域テナントのユーザー プロファイルを操作する」で説明されているように、ユーザー プロファイル プロパティの読み取りと更新に使用する推奨モデルは Graph API です。As explained in the article Work with user profiles in a Multi-Geo tenant, the preferred model to use to read and update user profile properties is the Graph API. このセクションでは、テナント全体でユーザー プロファイルを読み取りおよび更新できるようにするために、アプリケーションに付与する必要のあるアクセス許可について説明します。This section explains the permissions you must grant to your application to realize tenant-wide user profile reads and updates.

Azure AD で定義されたアプリケーションへ付与可能なアクセス許可の長いリストはありますが、プロファイルを操作するには、アクセス許可を以下のように制限することができます。There is a long list of possible permissions that you can grant to an application defined in Azure AD, but for manipulating profiles, you can limit the permissions to the following.

アクセス許可Permission Type 説明Description 管理者の許諾が必要Admin consent needed
User.ReadWrite.AllUser.ReadWrite.All アプリケーションのアクセス許可Application permission サインインしているユーザーなしで、アプリで組織内の他のユーザーのプロファイル プロパティ、グループ メンバーシップ、部下、上司の完全なセットを読み書きできるようにします。Allows the app to read and write the full set of profile properties, group membership, reports, and managers of other users in your organization, without a signed-in user.

また、アプリで非管理ユーザーの作成と削除もできるようにします。Also allows the app to create and delete non-administrative users.

ユーザーのパスワードのリセットはできません。Does not allow reset of user passwords.
はいYes
Sites.ReadWrite.AllSites.ReadWrite.All アプリケーションのアクセス許可Application permission アプリが、サインインしているユーザーなしで、すべてのサイト コレクション内のドキュメントを読み取り、書き込み、アイテムを一覧表示できるようにします。Allows the app to read/write documents and list items in all site collections without a signed-in user.

このアクセス許可は、アプリケーションがユーザーの個人用サイトの場所を取得する場合にのみ必要とされます (例: https://graph.microsoft.com/v1.0/users/UserB@contoso.onmicrosoft.com?$select=mySite)。This permission is only needed if the application will be retrieving the user's personal site location (for example, https://graph.microsoft.com/v1.0/users/UserB@contoso.onmicrosoft.com?$select=mySite).
はいYes

Microsoft Graph をベースとする複数地域機能のサンプルは、Microsoft 認証ライブラリ (MSAL) を使用して、v2 エンドポイントで Microsoft Graph に接続します。The Microsoft Graph-based Multi-Geo samples use the Microsoft Authentication Library (MSAL) to connect with the Microsoft Graph on the v2 endpoint. v1 エンドポイントを使用して接続する ADAL に対し、MSAL では、Microsoft アカウント、Azure AD、Azure AD B2C を使用した Microsoft Graph への接続を許可します。Compared to ADAL, which connects by using the v1 endpoint, MSAL allows connection to the Microsoft Graph by using Microsoft accounts, Azure AD, and Azure AD B2C. 次の指示は、v2 エンドポイントを使用するようアプリケーションをセットアップするのに役立ちますが、v1 エンドポイントに基づく「古い」手法を使用することもできます。The following instructions will help you set up your application for the v2 endpoint, but you can also use the "older" approach based on the v1 endpoints.

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

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

  2. ログインしたら、[アプリの追加] を選択し、[新規の Converged アプリケーションを追加] を選択します。After you're signed in, choose Add an app, and then choose Add a new converged application.

  3. アプリケーションの名前を指定し、[アプリケーションの作成] を選択します。Give your application a name, and then choose Create application.

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

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

  5. 新しいパスワードを生成し、アプリケーション ID と併せてそれを書き留めます。Generate a new password and make a note of it together with the application ID.

  6. [プラットフォームの追加] を選択します。その後、このアプリケーションにはランディング ページがないので、プラットフォーム ターゲットとして [ネイティブ アプリケーション] を選択します。Choose Add Platform, and then choose Native application as the platform target because the application does not have a landing page.

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

  7. 必要な [アプリケーション アクセス許可] を追加します。Add the necessary Application Permissions. このサンプル アプリでは、Sites.ReadWrite.All および User.ReadWrite.All のアプリケーション アクセス許可を追加しています。In this sample app, we have added the Sites.ReadWrite.All and User.ReadWrite.All application permissions.

  8. [Live SDK のサポート] チェック ボックスをオフにします。Clear the Live SDK support check box.

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

  9. 変更を保存します。Save your changes.

  1. このサンプルでは、User.ReadWrite.All および Sites.ReadWrite.All のアプリケーション アクセス許可は、使用前にテナント管理者の許諾を得る必要があります。In this sample, the User.ReadWrite.All and Sites.ReadWrite.All application permissions require admin consent in a tenant before they can be used. 次のような許諾 URL を作成します。Create a consent URL like the following:

    https://login.microsoftonline.com/<tenant>/adminconsent?client_id=<clientid>&state=<something>
    
  2. 登録されたアプリからクライアント ID を使用し、自分のテナント contoso.onmicrosoft.com からアプリを許諾する場合、URL は次のようになります。Use the client ID from the registered app, and consent to the app from my tenant contoso.onmicrosoft.com; the URL looks like this:

    https://login.microsoftonline.com/contoso.onmicrosoft.com/adminconsent?client_id=6e4433ca-7011-4a11-85b6-1195b0114fea&state=12345
    
  3. 作成した URL へ移動し、テナント管理者としてログインして、アプリケーションを許諾します。Browse to the created URL and sign in as a tenant admin, and consent to the application. アプリケーションの名前と、構成したアクセス許可スコープが許諾画面に表示されます。You can see that the consent screen shows the name of your application as well as the permission scopes you configured.

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

CSOM ユーザー プロファイル API を使用した、すべてのユーザー プロファイルの読み取りと更新Read and update profiles for all users using the CSOM User Profile API

CSOM API を使用してプロファイル プロパティを操作する場合、作成されたカスタム プロパティに対してのみこの操作を行います。なぜなら、すぐに使用できるプロパティは、Microsoft Graph API の方がより上手く処理できるからです。When using the CSOM API to manipulate profile properties, you do this only for the custom created properties because out-of-the-box properties are better handled via the Microsoft Graph API. 詳細については、「SharePoint の複数地域テナントのユーザー プロファイルを操作する」をご覧ください。For more information, see the article Work with user profiles in a Multi-Geo tenant.

アクセス許可の観点からすると、次の 2 つのモードがあります。From a permission point of view there are two modes:

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

    この場合、テナント管理者 URL と SharePoint Online 管理者資格情報を使用して、ClientContext オブジェクトを設定する必要があります。This requires setting up a ClientContext object by using the tenant admin URL and SharePoint Online admin credentials. ただ 1 つだけの Azure AD インスタンスがユーザーを保持しているということは、SharePoint Online の管理者がすべての地理的位置の管理者でもあることを意味します。Because there's only one Azure AD instance holding users, this implies that a SharePoint Online admin is the admin for all the geo locations.

    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;
    }
    
  • アプリ専用プリンシパルを使用するUsing an app-only principal

    アプリ専用を使用するときには、作成されたアプリ プリンシパルに、http://sharepoint/social/tenant アクセス許可スコープのフル コントロールの権利を与える必要があります。When using app-only, you must grant the created app principal full control for the http://sharepoint/social/tenant permission scope.

以下に、appregnew.aspx および appinv.aspx を使用してアプリ プリンシパルを登録し、許諾する方法を示します。The following instructions show you how to use appregnew.aspx and appinv.aspx to register an app principal and consent to it.

プリンシパルを作成するCreate the principal

  1. テナント内のサイト (例: https://contoso.sharepoint.com) に移動して、appregnew.aspx ページ (例: https://contoso.sharepoint.com/_layouts/15/appregnew.aspx) を呼び出します。Go to a site in your tenant (for example, https://contoso.sharepoint.com), and then call the appregnew.aspx page (for example, https://contoso.sharepoint.com/_layouts/15/appregnew.aspx).

  2. このページで、[生成] ボタンを選択して、クライアント ID とクライアント シークレットを生成します。On this page, choose the Generate button to generate a client ID and client secret.

  3. 残りのフィールドに、次のように情報を入力します。Complete the remaining fields as follows:

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

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

    注意

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

重要

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.

作成されたプリンシパルにアクセス許可を付与するGrant permissions to the created principal

次の手順では、新しく作成されたプリンシパルにアクセス許可を付与します。The next step is granting permissions to the newly created principal. テナント スコープのアクセス許可を付与しようとしているので、この付与はテナント管理サイトの appinv.aspx ページを介してのみ行えます。Because we're granting tenant-scoped permissions, this grant can only be done via the appinv.aspx page on the tenant administration site.

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

  2. ページが読み込まれたら、クライアント ID を追加して、作成されたプリンシパルを検索します。After the page is loaded, add your client ID, and then look up the created principal.

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

  3. アクセス許可を付与するために、必要なアクセス許可を記述するアクセス許可 XML を提供する必要があります。To grant permissions, you must provide the permission XML that describes the needed permissions. UI エクスペリエンス スキャナーは、すべてのサイトにアクセスできなければならず、またアプリ専用を使用した検索を使用するため、以下のアクセス許可を必要とします。Because the UI experience scanner needs to be able to access all sites and uses search with app-only, it requires the following permissions:

    <AppPermissionRequests AllowAppOnlyPolicy="true">
     <AppPermissionRequest Scope="http://sharepoint/social/tenant" Right="FullControl" />
    </AppPermissionRequests>
    
  4. [作成] を選択すると、アクセス許可の許諾ダイアログが表示されます。When you choose Create, you are presented with a permission consent dialog. [信頼する] を選択して、アクセス許可を付与します。Choose Trust It to grant the permissions.

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

コード内でプリンシパルを使用するUse the principal in your code

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

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 は、次のようになります。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 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 クラスをプロジェクトに簡単に挿入することができます。You can easily insert the TokenHelper.cs class in your project by adding the AppForSharePointOnlineWebToolkit NuGet package to your solution.

複数地域構成を検出するDiscover the Multi-Geo configuration

複数地域テナントの地理的位置を検出するのに使用できる、サポートされている唯一の API は、Graph API です。The only supported API that you can use to discover the geo locations in a Multi-Geo tenant is the Graph API. このセクションでは、複数地域情報を検出するために、アプリケーションに付与する必要のあるアクセス許可について説明します。This section explains the permissions you must grant to your application to discover Multi-Geo information.

Azure AD で定義されたアプリケーションへ付与可能なアクセス許可の長いリストはありますが、複数地域テナントの構成情報を読み込むには、アクセス許可を以下のように制限することができます。There is a long list of possible permissions that you can grant to an application defined in Azure AD, but for reading Multi-Geo tenant configuration information, you can limit permissions to the following.

アクセス許可Permission Type 説明Description 管理者の許諾が必要Admin consent needed
Sites.ReadWrite.AllSites.ReadWrite.All アプリケーションのアクセス許可Application permission アプリが、サインインしているユーザーなしで、すべてのサイト コレクション内のドキュメントを読み取り、書き込み、アイテムを一覧表示できるようにします。Allows the app to read/write documents and list items in all site collections without a signed-in user. はいYes

アプリケーションがすべてのユーザーのプロファイルを読み取り、更新できるようになる必要がある」セクションで説明されている、Azure AD アプリケーションの作成手順を使用します。Use the Azure AD application creation steps as described in the Read/update profiles for all users section.

サイト コレクションを作成および削除し、テナント サイト コレクションのプロパティを設定するCreate and delete site collections and set tenant site collection properties

Microsoft Graph API を使用するUsing the Microsoft Graph API

Microsoft Graph API を使用してグループ サイト (モダン チーム サイトとも呼ばれる) を作成する方法の詳細については、「マルチ地理的サイト」の記事に説明されています。The Multi-Geo sites article provides more details about how to create group sites (also known as "modern" team sites) by using the Microsoft Graph API. このセクションでは、アクセス許可についてのみ取り上げます。In this section, we're only addressing the permissions. 必要とされるアクセス許可の一覧を、以下の表に示します。The following table lists the needed permissions.

アクセス許可Permission Type 説明Description 管理者の許諾が必要Admin consent needed
Group.ReadWrite.AllGroup.ReadWrite.All アプリケーションのアクセス許可Application permission アプリが、グループの作成、グループ メンバーシップの読み取りと更新、グループの削除ができるようにします。Allows the app to create groups, read and update group memberships, and delete groups.

これらの操作はすべて、サインインしているユーザーなしで、アプリで実行できます。All of these operations can be performed by the app without a signed-in user.

すべてのグループ API が、アプリ専用のアクセス許可を使用したアクセスをサポートするわけではないことに注意してください。Note that not all group API supports access using app-only permissions.
はいYes

Microsoft Graph をベースとする複数地域機能のサンプルは、Microsoft 認証ライブラリ (MSAL) を使用して、v2 エンドポイントで Microsoft Graph に接続します。The Microsoft Graph based Multi-Geo samples use the Microsoft Authentication Library (MSAL) to connect with the Microsoft Graph on the v2 endpoint. v1 エンドポイントを使用して接続する ADAL に対し、MSAL では、Microsoft アカウント、Azure AD、Azure AD B2C を使用した Microsoft Graph への接続を許可します。Compared to ADAL, which connects using the v1 endpoint, MSAL allows connection to the Microsoft Graph by using Microsoft accounts, Azure AD, and Azure AD B2C.

アプリケーションがすべてのユーザーのプロファイルを読み取り、更新できるようになる必要がある」セクションで説明されている、Azure AD アプリケーションの作成手順を使用します。Use the Azure AD application creation steps as described in the Read/update profiles for all users section.

CSOM テナント API を使用するUsing the CSOM Tenant API

CSOM テナント API の使用方法は、前述の CSOM ガイダンスにある説明内容と非常によく似ています。実際、ユーザー資格情報を使用するためのガイダンスは同じです。Using the CSOM Tenant API is very similar to the previously described CSOM guidance; in fact, the guidance for using user credentials is identical. アプリ専用プリンシパルを使用する場合、手順は同じですが、異なるアクセス許可 (テナント、およびフル コントロール) を付与する必要があります。For using an app-only principal, the instructions are the same, but you must grant different permissions (tenant and full control).

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

関連項目See also