クレームに関するチュートリアル: ASP.NET SQL のメンバーシップ プロバイダーとロール プロバイダーを使用したクレーム ベースの SharePoint 2010 Web アプリケーション用のフォーム ベース認証の作成

概要:  ASP.NET SQL のメンバーシップ プロバイダーとロール プロバイダーを使用して、クレーム ベースの Web アプリケーション用にフォーム ベース認証を作成する方法について説明します。

最終更新日: 2013年1月18日

適用対象: Business Connectivity Services | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio

この記事の内容
ASP.NET SQL のメンバーシップ プロバイダーとロール プロバイダーによるクレーム ベース Web アプリケーションの認証の概要
手順 1: SharePoint Web アプリケーションの作成
手順 2: Web アプリケーションに ASP.NET のメンバーシップおよびロール プロバイダーを使用するためのデータベースの準備
手順 3: SharePoint Web アプリケーション用のメンバーシップとロール プロバイダーの構成
手順 4: メンバーシップおよびロール プロバイダー データベースへのユーザーとロールの追加
手順 5: フォーム ベース認証のテスト
手順 6: (オプション) 構成およびハンドルされない例外のエラーのトラブルシューティング
手順 7: クレームの表示
手順 8: 新しいユーザーとロールの追加
まとめ
その他の技術情報

提供元:  Andy Li、Microsoft Corporation

目次

  • ASP.NET SQL のメンバーシップ プロバイダーとロール プロバイダーによるクレーム ベース Web アプリケーションの認証の概要

  • 手順 1: SharePoint Web アプリケーションの作成

  • 手順 2: Web アプリケーションに ASP.NET のメンバーシップおよびロール プロバイダーを使用するためのデータベースの準備

  • 手順 3: SharePoint Web アプリケーション用のメンバーシップとロール プロバイダーの構成

  • 手順 4: メンバーシップおよびロール プロバイダー データベースへのユーザーとロールの追加

  • 手順 5: フォーム ベース認証のテスト

  • 手順 6: (オプション) 構成およびハンドルされない例外のエラーのトラブルシューティング

  • 手順 7: クレームの表示

  • 手順 8: 新しいユーザーとロールの追加

  • まとめ

  • その他の技術情報

クリックしてコードを取得 ダウンロード コード: ClaimsExample-CreateFormsBasedAuthentication (英語)

ASP.NET SQL のメンバーシップ プロバイダーとロール プロバイダーによるクレーム ベース Web アプリケーションの認証の概要

このチュートリアルでは、Microsoft ASP.NET のメンバーシップとロール プロバイダーを認証プロバイダーとして使用して、クレーム ベースの Web アプリケーションを作成します。

フォーム ベース認証は、個別のユーザーを識別して認証するためのインターフェイスを定義するメンバーシップ プロバイダーと、個別のユーザーを論理的なグループつまりロールにグループ化するためのインターフェイスを定義するロール マネージャーを実装することで、Microsoft SharePoint 2010 におけるカスタム ID 管理を提供します。

この記事は、読者がフォーム ベース認証をよく理解しているという前提で書かれています。フォーム ベース認証の詳細については、「SharePoint 製品とテクノロジのフォーム認証 (パート 1): 概要」を参照してください。

手順 1: SharePoint Web アプリケーションの作成

注意

この記事からコマンド ライン コマンドを単純にコピーして実行しようとすると、エラーが発生する場合があります。これは、一部の文字が書式設定の間に特殊文字に変換されるためです。たとえば、ハイフン記号 (-) をこの記事からコピーすると、コマンド プロンプト ウィンドウで正しく動作しない場合があります。

SharePoint Web アプリケーションを作成するには

  1. SharePoint 2010 サーバーの全体管理ページを表示します。

  2. [アプリケーション構成の管理] セクションで、[Web アプリケーションの管理] をクリックします。

  3. リボンで、[新規作成] をクリックします。

  4. [新しい Web アプリケーションの作成] ダイアログ ボックスの、[認証] で、[クレーム ベースの認証] をクリックします。

  5. [IIS Web サイト] セクションの [新しい IIS Web サイトを作成する] で、[名前] フィールドを「SharePoint – SQL FBA」に変更します。

  6. [ポート] 番号を 200 に変更します。

  7. [クレーム認証の種類] セクションで、以下の操作を実行します。

    • [フォーム ベース認証 (FBA) の有効化] を選択します。

    • 他の認証モードをオフにします。

  8. メンバーシップ プロバイダーとロール マネージャーのフィールドに、次の名前を入力します。

    • ASP.NET メンバーシップ プロバイダー名: aspnetmembership

    • ASP.NET ロール マネージャー名: aspnetrolemanager

      注意

      メンバーシップ プロバイダーとロール プロバイダーはまだ設定してありません。これらは後の手順で作成します。

  9. [URL] を「http://intranet.contoso.com:200」に変更します。

  10. [データベース名と認証] セクションで、データベース名を「WSS_Content_200」に変更します。

  11. その他の設定は既定のままにします。

  12. [OK] をクリックして、Web アプリケーションを作成します。

手順 2: Web アプリケーションに ASP.NET のメンバーシップおよびロール プロバイダーを使用するためのデータベースの準備

ここでは、ASP.NET のメンバーシップ プロバイダーとロール プロバイダー用に、Microsoft SQL Server データベースを手動で準備します。この構成はツールで行うこともできます。ここでは手作業で行うことにより、構成に含まれるプロバイダーのすべての要素の理解が深まるようにします。

注意

Microsoft SQL Server メンバーシップ プロバイダーは、ユーザー情報を SQL Server データベースに格納します。コマンド ラインから Aspnet_regsql.exe を実行することで、SQL Server ユーザー ストアを手動で作成できます。または、Aspnet_regsql.exe をウィザード モードで実行することも (「ASP.NET SQL Server 登録ツール (Aspnet_regsql.exe)」を参照)、または ASP.NET 構成ツールを使用することもできます。ASP.NET 構成ツールは、Microsoft Visual Studio の [Web サイト] メニューにあります。

Web アプリケーションに ASP.NET メンバーシップ プロバイダーおよびロール プロバイダーを使用するようにデータベースを準備するには

  1. Microsoft SQL Server Management Studio を起動して、ローカル サーバー インスタンスに接続します。

  2. 図 1 に示すように、aspnetdb_claim という名前の新しいデータベースを追加します。

    図 1. aspnetdb_claim という名前の新しいデータベースの作成

    新しいデータベースの作成

  3. aspnet_regsql.exe を使用して、メンバーシップ データベースを作成します。コマンド プロンプト ウィンドウを開きます。次のコマンド ライン コマンドを実行して、Microsoft .NET Framework 2.0 ディレクトリに変更します。

    cd C:\Windows\Microsoft.NET\Framework64\v2.0.50727

  4. 図 2 に示すように、次のコマンドを実行します。

    aspnet_regsql -S DEMO2010A -E -A mr –d aspnetdb_claim

    -S    サーバーを指定します。この例ではサーバーはローカルです。

    -E    Windows 認証を使用して SQL Server に接続することを指定します。

    -A mr   メンバーシップおよびロール機能を追加することを指定します。

    -d    データベースの名前を指定します。

    図 2. aspnet_regsql.exe を使用したメンバーシップ データベースの作成

    aspnet_regsql.exe を使用してメンバーシップ データベースを作成する

  5. aspnetdb_claim ノードを展開し、すべてのテーブルが作成されていることを確認します。

    図 3. 展開された aspnetdb_claim ノード

    展開された aspnetdb_claim ノード

  6. Web アプリケーションの AppPool アカウントに、データベースへのアクセスを許可します。Web アプリケーションは contoso\adminstrator を使用してログオンするので、このデータベースへのフル アクセスが自動的に設定されているはずです。

手順 3: SharePoint Web アプリケーション用のメンバーシップとロール プロバイダーの構成

3 つの web.config ファイルを変更する必要があります。

  • サーバーの全体管理: サイト コレクション用の選択を許可するため。

  • セキュリティ トークン サービス: サインインを許可し、トークンを発行するため。

  • FBA Web アプリケーション: ローカル Web アプリケーションでの選択を許可するため。

SharePoint Web アプリケーション用にメンバーシップ プロバイダーおよびロール プロバイダーを構成するには

  1. SQL フォーム ベース認証 Web アプリケーションの web.config ファイルで、終了の </configSections> タグの後に次の接続文字列を追加します。

    注意

    次の例を貼り付ける場合、タブ文字または空白文字が追加されることがあります。web.config を変更するときに、タブ文字または空白文字が追加されていないことを確認してください。

    接続文字列を追加した後の web.config ファイルは、次の例のようになります。

    <connectionStrings>
      <add name="MyLocalSQLServer"
           connectionString="Initial Catalog=aspnetdb_claim;data source=DEMO2010A;Integrated Security=SSPI;" />
    </connectionStrings>
    
  2. 前の手順を、サーバーの全体管理 Web サイトおよび SecurityTokenServiceApplication Web サイトに対して繰り返します。

    図 4 に示すように、SecurityTokenServiceApplication Web サイトは SharePoint Web サービス Web サイトの下にあります。

    図 4. SecurityTokenServiceApplication Web サイトの場所

    SecurityTokenServiceApplication Web サイトの場所

  3. フォーム ベース認証 Web アプリケーションの Web サイト (http://intranet.contoso.com:200) に戻り、web.config ファイルを再び開きます。

  4. <membership> タグの下にある <Providers> タグの中に次のコードを追加します (図 5 を参照)。

      <add name="aspnetmembership" 
                 connectionStringName="MyLocalSQLServer" 
                 applicationName="MyAppName" 
                 type="System.Web.Security.SqlMembershipProvider, 
                 System.Web, Version=2.0.0.0, Culture=neutral, 
                 PublicKeyToken=b03f5f7f11d50a3a" />
    

    図 5. FBA Web アプリケーションの web.config ファイルでのプロバイダーの値

    プロバイダーの値

  5. <RoleManager> セクションの下にある <Providers> タグに、次のロール マネージャー要素を追加します (図 6 を参照)。

            <add name="aspnetrolemanager" 
                 type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                 connectionStringName="MyLocalSQLServer"
                 applicationName="MyAppName" />
    

    図 6. FBA Web アプリケーションの web.config ファイルでのロール マネージャーの値

    ロール マネージャーの値

    注意

    applicationName 属性では、Web アプリケーションのアプリケーション名を指定します。これは、ASP.NET のメンバーシップ プロバイダーおよびロール プロバイダーがユーザーを一意に識別するために使用する名前です。

  6. 手順 1. から手順 5. までを、サーバーの全体管理 Web サイトと SecurityTokenServiceApplication Web サイトの両方に対して繰り返します。

    注意

    SharePoint セキュリティ トークン サービス (STS) Web サイトの web.config ファイルには <system.web> セクションが含まれないので、セクションを手動で追加する必要があります。図 4 に示すように、SecurityTokenServiceApplication Web サイトは SharePoint Web サービス Web サイトの下にあります。完成した web.config ファイルの例を見るには、この記事に付属するダウンロード (ClaimsExample-CreateFormsBasedAuthentication (英語)) に含まれる構成ファイルを開いてください。

手順 4: メンバーシップおよびロール プロバイダー データベースへのユーザーとロールの追加

次に、メンバーシップとロールのプロバイダー データベースに、ユーザーとロールを追加します。

メンバーシップおよびロールのプロバイダー データベースにユーザーとロールを追加するには

  1. Microsoft SQL Server Management Studio を起動し、図 7 に示すように、aspnetdb_claim データベースに対して次のクエリを実行します。

    declare @now datetime
    set @now= GETDATE()
    exec aspnet_Membership_CreateUser 'MyAppName','admin1','pass@word1',
        '','admin1@contoso.com','','',1,@now,@now,0,0,null
    

    図 7. aspnetdb_claim データベースのクエリ

    aspnetdb_claim データベースへのクエリ

  2. 図 8 に示すように、次のクエリを実行してユーザー admin1Admin ロールに追加します。

    EXEC aspnet_Roles_CreateRole 'MyAppName', 'Admin'
    EXEC aspnet_UsersInRoles_AddUsersToRoles 'MyAppName', 'admin1', 'Admin', 8 
    

    図 8. Admin ロールへのユーザー admin1 の追加

    管理ロールへのユーザー admin1 の追加

手順 5: フォーム ベース認証のテスト

次に、フォーム ベースの認証をテストします。

フォーム ベースの認証をテストするには

  1. サーバーの全体管理 Web サイトで、[アプリケーション構成の管理] の [サイト コレクションの作成] をクリックします。

  2. [Web アプリケーション] ボックスの一覧で、FBA Web アプリケーション http://intranet.contoso.com:200 を選択します (図 9 を参照)。

    図 9. Web アプリケーションの構成

    Web アプリケーションの構成

  3. [タイトル] フィールドの値を「FBA Site」に変更します。

  4. [ユーザー名] フィールドで、[参照] をクリックし、追加したユーザーを検索します。

  5. 図 10 に示すように、検索ボックスに「admin1」と入力し、検索ボタンをクリックします。

    図 10. ユーザー選択ウィンドウ

    ユーザー選択ウィンドウ

  6. 結果領域で admin1 ユーザーをダブルクリックします。サイト コレクション作成ページに自動的に戻ります。

  7. [OK] をクリックして、サイト コレクションを作成します。

  8. http://intranet.contoso.com:200 に移動します。図 11 のようなログオン ページが表示されます。

    図 11. ログオン ページ

    [ログオン] ページ

  9. 次の資格情報を入力して、[Sign In] をクリックします。

    • ユーザー名: admin1

    • パスワード: pass@word1

  10. ログオンした後、図 12 に示すように、右上隅のユーザー名に admin1 と表示されることを確認します。

    図 12. ユーザー admin1 が認証された後の SharePoint サイト

    ユーザー admin1 の認証後の SharePoint サイト

手順 6: (オプション) 構成およびハンドルされない例外のエラーのトラブルシューティング

図 13 は、web.config ファイルに誤った構成を入力した場合に表示されるエラーです。すべての SharePoint プロセスのすべての web.config ファイルを編集する必要があることに注意してください。この記事に付属するダウンロードには、参照用に 3 つの web.config ファイルが収められています。図 14 はハンドルされない例外のエラーです。

図 13. メンバーシップ プロバイダー構成エラー

メンバーシップ プロバイダー構成エラー

図 14. ハンドルされない例外エラー

未処理の例外エラー

ハンドルされない例外エラーが発生する場合は、図 15 のように、値 includeExceptionDetailInFaults を <serviceBehaviors> セクションに追加する必要があります。

図 15. <serviceBehaviors> セクションへの includeExceptionDetailInFaults の追加

includeExceptionDetailInFaults 値の追加

手順 7: クレームの表示

次に、クレームを表示します。

クレームを表示するには

  1. Web パーツを作成し、RenderContent 関数を次のコードに置き換えます。Microsoft.IdentityModel.dll の参照および名前空間 Microsoft.IdentityModel.Claims の追加が必要な場合があります。

            protected override void RenderContents(HtmlTextWriter writer)
            {
                try
                {
                    IClaimsIdentity currentIdentity = System.Threading.Thread.CurrentPrincipal.Identity as IClaimsIdentity;
                    writer.Write("---Subject:" + currentIdentity.Name + "<BR/>");
    
                    foreach (Claim claim in currentIdentity.Claims)
                    {
                        writer.Write("   ClaimType: " + claim.ClaimType + "<BR/>");
                        writer.Write("   ClaimValue: " + claim.Value + "<BR/");
                        writer.Write("   ClaimValueTypes: " + claim.ValueType + "<BR/>");
                        writer.Write("   Issuer: " + claim.Issuer + "<BR/");
                        writer.Write("   OriginalIssuer: " + claim.OriginalIssuer + "<BR/>");
                        writer.Write("   Properties: " + claim.Properties.Count.ToString() + "<BR/>");
                    }
                }
                catch (Exception ex)
                {
                    writer.Write("exception occurred: " + ex.Message);
                }
    
            }
    
  2. ソリューションを展開し、FBA サイト Web アプリケーションのホーム ページに Web パーツを追加します (図 16 を参照)。

    図 16. クレームの種類とクレームの値の情報

    クレームの種類とクレームの値の情報

  3. 次の 2 つのクレームに注意してください。

    ClaimType: https://schemas.microsoft.com/sharepoint/2009/08/claims/userid
    ClaimValue: 0#.f|aspnetmembership|admin1
    ClaimType: https://schemas.microsoft.com/ws/2008/06/identity/claims/role
    ClaimValue: Admin
    

    ロール クレームは、ASP.NET ロール プロバイダーから取得されます。Admin はユーザーに割り当てたロールの名前であることを思い出してください。SQL クエリを実行してユーザーのロールを追加したときのロールは admin1 です。

手順 8: 新しいユーザーとロールの追加

次に、新しいユーザーとロールを追加します。

ユーザーとロールをさらに追加するには

  1. プロバイダーにさらにユーザーとロールを追加するには、次の SQL クエリを実行します。

    declare @now datetime
    set @now= GETDATE()
    
    exec aspnet_Membership_CreateUser 'MyAppName','bob','pass@word1',
        '','bob@contoso.com','','',1,@now,@now,0,0,null
    exec aspnet_Membership_CreateUser 'MyAppName','mary','pass@word1',
        '','mary@contoso.com','','',1,@now,@now,0,0,null
    exec aspnet_Membership_CreateUser 'MyAppName','jack','pass@word1',
    '','jack@contoso.com','','',1,@now,@now,0,0,null
    
    EXEC aspnet_Roles_CreateRole 'MyAppName', 'Employee'
    EXEC aspnet_Roles_CreateRole 'MyAppName', 'TeamManager'
    EXEC aspnet_Roles_CreateRole 'MyAppName', 'CEO'
    
    EXEC aspnet_UsersInRoles_AddUsersToRoles 'MyAppName', 'bob', 'Employee', 8 
    EXEC aspnet_UsersInRoles_AddUsersToRoles 'MyAppName', 'mary', 'TeamManager', 8 
    EXEC aspnet_UsersInRoles_AddUsersToRoles 'MyAppName', 'jack', 'CEO', 8 
    EXEC aspnet_UsersInRoles_AddUsersToRoles 'MyAppName', 'jack', 'Admin', 8 
    
  2. リボンの [サイトの操作の] で、[サイトの権限] を選択して、[アクセス許可の付与] をクリックします。[参照] アイコンをクリックして、ユーザー選択ウィンドウ ダイアログ ボックスを開きます。まだ admin1 としてログオンしていることを確認します。

  3. 図 17 のように、Forms Auth を選択します。

    図 17. 検索結果が表示されたユーザー選択ウィンドウ

    検索結果が表示されるユーザー選択ウィンドウ

  4. 図 17 のように検索ボックスに「bob」と入力し、[検索] をクリックします。1 レコードが返るはずです。

  5. bob をダブルクリックして、[追加->] ボックスに追加します。

  6. [OK] をクリックします。

  7. 手順 4. ~ 6. を繰り返して、ユーザー mary を追加します。

  8. 図 18 で示されているように、ドロップダウン ボックスから [FBA Site Members] を選択します。

    図 18. ユーザーへのアクセス許可の付与

    ユーザーへのアクセス許可の付与

  9. [OK] をクリックします。

  10. リボンで [アクセス許可の付与] をクリックします。

  11. [参照] をクリックして、ユーザー選択ウィンドウを起動します。

  12. 前の図 17 と同じように、再び左側の Forms Auth を選択します。

  13. 検索ボックスに「ceo」と入力します。図 19 のように、1 レコードが返るはずです。

    注意

    この記事の例では、ceo は ASP.NET ロール プロバイダーのロールです。このロールは、手順 8. の最初に SQL クエリを使用して追加したものです。

    図 19. ceo という名前のロールの検索

    CEO という名前のロールの検索

  14. ceo をダブルクリックして、[アクセス許可の付与] ページに追加します。

  15. 図 20 のように、ロール ceo にフル コントロール アクセス許可を付与します。

    図 20. ceo へのフル コントロールのアクセス許可の付与

    CEO へのフル コントロールのアクセス許可の付与

  16. 図 21 のように、ページの右上隅の admin1 をクリックし、[別のユーザーとしてサインイン] を選択します。

    図 21. 別のユーザーとしてサインイン

    別のユーザーとしてサインイン

    ユーザー bob およびユーザー mary としてサイトへのログオンを試みます。Web パーツにロール プロバイダーから正しいロール クレームが表示されることを確認してください。

  17. jack としてログオンを試みます。ユーザー jack は次の 2 つのクレームを受け取ることに注意してください。

    クレームの種類: https://schemas.microsoft.com/ws/2008/06/identity/claims/role

    クレームの値: Admin

    クレームの種類: https://schemas.microsoft.com/ws/2008/06/identity/claims/role

    クレームの値: ceo

    この 2 つのクレームは、事前に SQL クエリで割り当てたロールと一致します。ロール ceo にはアクセス許可を付与したので、ユーザーが ceo クレームを持っている場合は、サイトにログオンし、対応する権限を持つことができます。

まとめ

このチュートリアルでは、ASP.NET SQL のメンバーシップ プロバイダーとロール プロバイダーを使用して、クレーム ベース Web アプリケーション用のフォーム ベース認証を作成する方法について説明しました。

その他の技術情報

詳細については、次のリソースを参照してください。