アプリケーション プリンシパル ユーザーを作成する

最終更新日: 2010年11月18日

適用対象: SharePoint Foundation 2010

ここでは、アプリケーション プリンシパル (Microsoft SharePoint Foundation データにアクセスする SharePoint 以外のアプリケーションを表す SPUser オブジェクト) の作成方法について説明します。

セキュリティ上の理由により、管理者が SharePoint Foundation UI を使用してアプリケーション プリンシパルを追加することはできません。通常、このコードは小さなコンソール アプリケーションになりますが、カスタム PowerShell コマンドレットAdd-Type コマンドレットを使用する Windows PowerShell コマンド ライン インターフェイス スクリプト、またはその他の実行可能なコンテキストで実行できます。

注意

ユーザー アカウントをアプリケーション プリンシパルにする処理は、元に戻すことができません。SPUser.IsApplicationPrincipal プロパティは読み取り専用です。これは、アプリケーション プリンシパルが、Silverlight クロス ドメイン データ アクセス モデルでのみ使用されるべきだからです。これは、別の人間のユーザーがログインして、それ自体がサードパーティ サーバー上で Silverlight アプリケーションをホストしている、Silverlight Web パーツをホストするページを開くとき、SharePoint データへのサードパーティ サーバー アクセスを許可するのが目的です。アプリケーション プリンシパルを通常ユーザーに変えることができるとすると、このようなユーザーは、最初に人間がページを表示する必要なしに、SharePoint データに対して、意図しない完全なアクセスができるようになる可能性があります。

コードは、アプリケーション プリンシパル ユーザーを追加する Web サイトの親サイト コレクションに対する管理者のコンテキストで実行する必要があります。

アプリケーション プリンシパルを作成するには

  1. C# プロジェクトに Microsoft.SharePoint.dll への参照と Microsoft.SharePoint の using ステートメントを追加します。

  2. アプリケーション プリンシパルを追加する Web サイトへの参照を取得します。次に例を示します。

    SPSite site = new SPSite("https://localhost");
    SPWeb web = site.RootWeb;
    
    Dim site As New SPSite("https://localhost")
    Dim web As SPWeb = site.RootWeb
    
  3. AddApplicationPrincipal(String, Boolean, Boolean) への呼び出しのユーザー オブジェクトを作成します。この例では、1 つ以上の外部アプリケーションがインストールされている外部サーバーを含むログオン名が、ユーザーに与えられます。2 つの Boolean パラメーターによって、ユーザーの AllowBrowseUserInfo および RequireRequestToken プロパティが、それぞれ推奨値に設定されています。これにより、以下のことが指定されます。

    • アプリケーションは、アクセス許可の割り当てによって許可されている場合でも、ユーザー情報にアクセスできない。

    • アプリケーションは、実際のユーザーの移動先ページの Web パーツでホストされていない限り、SharePoint Foundation Web アプリケーションにアクセスできない。アプリケーションの有効なアクセス許可は、このアクセス許可の割り当てと、実際のユーザーのアクセス許可の共通部分になります。

    SPUser principal = web.AddApplicationPrincipal("ContosoAppServer", false, true);
    
    Dim principal As SPUser = web.AddApplicationPrincipal("ContosoAppServer", False, True)
    
    重要重要

    AddApplicationPrincipal(String, Boolean, Boolean) に渡されるログオン名 (この例では "ContosoAppServer") は、認証システムに対して既知のユーザー (たとえば、Active Directory ドメイン サービス内の既存のユーザー) であるが、Web サイトのユーザーではない必要があります。

  4. アプリケーション プリンシパルをアクセス許可レベルに割り当てます。この例では、アプリケーション プリンシパルを contributor (投稿者) にしています。

    SPRoleDefinitionBindingCollection roleDefBindCol = new SPRoleDefinitionBindingCollection();
    roleDefBindCol.Add(web.RoleDefinitions.GetByType(SPRoleType.Contributor));
    
    SPRoleAssignment roleAssign = new SPRoleAssignment(principal);
    roleAssign.ImportRoleDefinitionBindings(roleDefBindCol);
    
    web.RoleAssignments.Add(roleAssign);
    
    Dim roleDefBindCol As New SPRoleDefinitionBindingCollection()
    roleDefBindCol.Add(web.RoleDefinitions.GetByType(SPRoleType.Contributor))
    
    Dim roleAssign As New SPRoleAssignment(principal)
    roleAssign.ImportRoleDefinitionBindings(roleDefBindCol)
    
    web.RoleAssignments.Add(roleAssign)