昇格した権限

アプリのみのポリシーまたはサービス アカウントを使用して、SharePoint Add-ins またはその他のリモート ホスト ソリューションの権限を昇格します。

適用対象: SharePoint 用アプリ | SharePoint 2013 | SharePoint アドイン | SharePoint Online

SharePoint アドインおよびファーム ソリューションでは、権限を昇格させるために、さまざまな方法が使用されます。 ファーム ソリューションは、SharePoint サーバー側オブジェクト モデルに属する RunWithElevatedPrivileges(SPSecurity.CodeToRunElevated) を使用して権限を昇格させます。 SharePoint アドインは、アプリ専用のポリシーまたはサービス アカウントのどちらかを使用します。

以下の場合に、昇格された権限をアドインで使用することができます。

  • 完了させるために必要な個別の許可をユーザーが持っていない処理をアドインがユーザーのために実行する場合。 許可レベルが高すぎるために、管理者はユーザーに特定の許可を割り当てないことがあります。

    たとえば、組織がカスタムのサイト コレクション プロビジョニング ソリューションを実装しており、ユーザーがサイト コレクションを作成する際にはそれを使用しなければならない場合が考えられます。 組織は、すべての新しいサイト コレクションに、特定のリスト、コンテンツ タイプ、またはフィールドを関連付ける必要があると指定するかもしれません。 ユーザーが独自のサイト コレクションを作成する場合に、それらのオブジェクトを忘れずに新しいコレクションに作成するかどうかは不確かです。 このシナリオで、ユーザーはアドインを使用してサイト コレクションを作成しますが、サイト コレクションを作成する許可はユーザーに個別に割り当てられていません。

  • アドインが何らかのユーザーのために機能するわけではない場合。たとえばガバナンスや管理プロセスなどです。

アプリ専用ポリシーの承認

アプリ専用ポリシーは OAuth を使用してアドインを認証します。 アドインがアプリ専用ポリシーを使用するとき、SharePoint はアドイン プリンシパルの許可だけを確認します。 これらは、アドインに付与された許可です。 現在のユーザーに関連付けられた許可とは関係なく、アドインにタスクを実行するための十分な許可があれば、承認は成功します。 承認が成功すると、アクセス トークンがアドインに返されます。 アドインはこのアクセス トークンを使用して、コードによって要求されるすべての操作を実行します。

詳細については、「SharePoint 2013 のアドイン承認ポリシーの種類」を参照してください。

注:

アプリ専用ポリシーは、プロバイダー ホスト型アドインでのみ使用可能です。ホスト Web にアクセスする SharePoint ホスト型アドインは、ユーザー + アプリのポリシーを使用する必要があります。

アドインでアプリ専用ポリシーを使用することには、以下のような利点があります。

  • 別個にユーザー ライセンスを付与する必要がありません。 サービス アカウントには、別個のユーザー ライセンスが必要です。

  • サービス アカウントに比べて、より詳細に制御できます。 たとえば FullControl 許可を Web に適用できますが、これはサービス アカウントを使用する場合は不可能です。

以下の API にはアプリ専用ポリシーを使用できません。

  • ユーザー プロファイル

  • 検索

アプリ専用ポリシーを使用するには、まず appinv.aspx を使用してアドインに許可を付与する必要があります。 AppManifest.xml ファイルにある以下のコードは、アプリ専用ポリシーと許可をアドインに設定する方法を示しています。

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

アプリ専用ポリシーを使用するには、アドインが低信頼または高信頼の承認を使用している必要があります。 SharePoint リソースへの承認されたアクセス許可を取得する 3 番目の方法である SharePoint クロスドメイン JavaScript ライブラリでは、このポリシーを使用できません。

app@sharepointアクセス許可は、最新の用語ストア ユーザー インターフェイスでは機能しなくなりました。 これは、アプリがアプリのみの分類アクセスに必要なリソースの同意を持つ Azure AD に登録されている限り、アプリが分類書き込み操作を実行するために、app@sharepointアクセス許可が不要になったためです。

低信頼の承認

Microsoft Azure Access Control Service (ACS) を使用してプロバイダー ホスト型アドインと Office 365 サイトまたはオンプレミスの SharePoint ファームとの間に信頼を確立する際に、アドインは低信頼の認可を使用できます。 詳細については、「SharePoint アドイン 2013 の 3 つの認可システム」を参照してください。

重要

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

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

ClientContext オブジェクトへの参照を取得するため、アドインは以下を行う必要があります。

  1. TokenHelper.GetAppOnlyAccessToken を使用してアクセス トークンを取得します。

  2. TokenHelper.GetClientContextWithAccessToken を使用して ClientContext オブジェクトを取得します。

注:

TokenHelper ファイルは、Microsoft Office Developer Tools for Visual Studio によって生成されるソース コードです。 これに関するリファレンス ドキュメントはありませんが、TokenHelper クラスには多くのコメントがあります。 コードのコメントを表示するには、Visual Studio でプロバイダー ホスト型アドインを作成します。

注:

この記事で提供されるコードは、明示または黙示のいかなる種類の保証なしに現状のまま提供されるものであり、特定目的への適合性、商品性、権利侵害の不存在についての暗黙的な保証は一切ありません。

Uri siteUrl = new Uri(ConfigurationManager.AppSettings["MySiteUrl"]);
try
{
    // Connect to a site using an app-only token.
    string realm = TokenHelper.GetRealmFromTargetUrl(siteUrl);
    var token = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUrl.Authority, realm).AccessToken;

    using (var ctx = TokenHelper.GetClientContextWithAccessToken(siteUrl.ToString(), token))
    {
        // Perform operations on the ClientContext object, which uses the app-only token. 
    }
}
catch (Exception ex)
{
    Console.WriteLine("Error in execution: " + ex.Message);
}

高信頼の承認

アドインは、高信頼の承認システム (S2S プロトコルとも呼ばれる) を使用する場合、別の TokenHelper メソッドである TokenHelper.GetS2SAccessTokenWithWindowsIdentity を呼び出します。

Important: The TokenHelper.GetS2SAccessTokenWithWindowsIdentity is used for both app-only and user+app calls. The second parameter of the method, which holds the user identity, determines which policy is used. Pass null to use the app-only policy.

サービス アカウント

タスクを完了するために必要な許可がアプリ専用ポリシーによって提供されない場合にのみ、サービス アカウントを使用してアドインの権限を昇格させます。 また、特定のシナリオではユーザー アカウントが必要です。 たとえば、コードが以下のいずれかの SharePoint サービス アプリケーションと共に実行されるときには、サービス アカウントを使用する必要があります。

  • クライアント側オブジェクト モデル (CSOM) を使用するユーザー プロファイル サービス

  • 管理されたメタデータ サービス

  • 検索

アドインでのサービス アカウントの使用を計画する際には、以下を検討します。

  • サービス アカウントには、別個のユーザー ライセンスが必要です。

  • アドインごとに 1 つのサービス アカウントを作成するか、または SharePoint 環境内のすべてのアドイン用に 1 つのサービス アカウントを作成します。

  • 承認の際に、ユーザー名とパスワードを指定する必要があります。 サービス アカウントの資格情報の保管と取得の安全を確認してください。

  • アドインがサイトでのアクションを実行するには、サイトにアクセスするためのアクセス許可を事前にサービス アカウントに付与する必要があります。

注:

Office ストアから購入したアドインでは、サービス アカウントを使用できません。

以下のコードは、SharePointOnlineCredentials をサービス アカウントと共に使用して認証を行う方法を示しています。

using (ClientContext context = new ClientContext("https://contoso.sharepoint.com"))
{

    // Use default authentication mode.
    context.AuthenticationMode = ClientAuthenticationMode.Default;  

    // Specify the credentials for the service account.
    context.Credentials = new SharePointOnlineCredentials("User Name", "Password");
}

関連項目