クレームに関するチュートリアル: カスタムのメンバーシップとロール プロバイダーを使用してクレーム ベースの SharePoint 2010 Web アプリケーション用のフォーム ベース認証を作成する
概要: カスタムのメンバーシップとロール プロバイダーを使用してクレーム ベースの Web アプリケーション用にフォーム ベース認証を作成する方法を説明します。
最終更新日: 2013年1月18日
適用対象: Business Connectivity Services | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio
この記事の内容
カスタムのメンバーシップとロール プロバイダーを使用したクレーム ベースの Web アプリケーションの認証の概要
手順 1: メンバーシップとロール プロバイダーのコードを確認する
手順 2: メンバーシップとロール プロバイダーをビルドして展開する
手順 3: SharePoint Web アプリケーションを作成する
手順 4: SharePoint Web アプリケーション用にメンバーシップとロール プロバイダーを構成する
手順 5: フォーム ベース認証をテストする
手順 6: クレームを表示する
まとめ
その他の技術情報
提供元: Andy Li、Microsoft Corporation
目次
カスタムのメンバーシップとロール プロバイダーを使用したクレーム ベースの Web アプリケーションの認証の概要
手順 1: メンバーシップとロール プロバイダーのコードを確認する
手順 2: メンバーシップとロール プロバイダーをビルドして展開する
手順 3: SharePoint Web アプリケーションを作成する
手順 4: SharePoint Web アプリケーション用にメンバーシップとロール プロバイダーを構成する
手順 5: フォーム ベース認証をテストする
手順 6: クレームを表示する
まとめ
その他の技術情報
ダウンロード コード: ClaimsExample-UsingCustomMembershipandRoleProvider (英語)
カスタムのメンバーシップとロール プロバイダーを使用したクレーム ベースの Web アプリケーションの認証の概要
ここでは、認証プロバイダーとしてカスタムのメンバーシップとロール プロバイダーを使用して、クレーム ベースの Web アプリケーションを作成します。
フォーム ベースの認証では、メンバーシップ プロバイダーとロール マネージャーを実装することによって Microsoft SharePoint 2010 でのカスタム ID 管理を提供します。メンバーシップ プロバイダーは個別のユーザーを識別および認証するためのインターフェイスを定義し、ロール マネージャーは個別のユーザーを論理グループまたはロールにグループ化するためのインターフェイスを定義します。
この記事では、フォーム ベース認証について読者がよくご存知であるものとして説明を進めています。フォーム ベース認証の詳細については、「Forms Authentication in SharePoint Products and Technologies (Part 1): Introduction」を参照してください。
手順 1: メンバーシップとロール プロバイダーのコードを確認する
まず、メンバーシップとロール プロバイダーのコードを確認します。
メンバーシップとロール プロバイダーのコードを確認するには
ContosoProviders プロジェクトを開きます。このプロジェクトは、ダウンロード コード: ClaimsExample-UsingCustomMembershipandRoleProvider (英語) のコード サンプル ダウンロードに含まれています。
注意
このプロジェクトには、クレーム ベースの Web アプリケーションに使用するメンバーシップとロール プロバイダーの定義が入っています。
Members.cs ファイルを開きます。
注意
メンバーシップ プロバイダーは、ContosoProviders.Members として定義されています。UserDB は、ユーザー データベースをシミュレートする文字列配列です。
private static string[] UserDB = { "user1:user1@contoso.com", "user2:user2@contoso.com", "user3:user3@contoso.com", "user4:user4@contoso.com", "user5:user5@contoso.com", "user6:user6@contoso.com" };
次に示す 2 つのメソッドを確認します。
public override MembershipUser GetUser(string username, bool userIsOnline) public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
この 2 つのメソッドは、ユーザー名に基づいて MembershipUser オブジェクトを取得するのに使用されます。
次に示す 2 つのメソッドを確認します。
public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords) public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
この 2 つのメソッドは、ユーザーがユーザー名の検索または解決を試みたときに SharePoint ユーザー選択によって呼び出されます。
ValidateUser メソッドを確認します。
public override bool ValidateUser(string username, string password)
このメソッドは、ユーザーの資格情報を検証するのに使用されます。このサンプル メンバーシップ プロバイダーでは、単にユーザーの存在を検証するだけです (パスワードの検証は行いません)。
注意
運用環境では、ユーザーのパスワードを検証する必要があります。このサンプルは、あくまでデモ用であり、運用環境では使用しないでください。
Roles.cs ファイルを開きます。
ロール プロバイダーは、ContosoProviders.Roles として定義されています。
UserRoleDB 配列と RoleDB 配列は、ユーザーとロールのストアをシミュレートするのに使用されます。
private static string[] UserRoleDB = { "user1:Role1:Role2:Role3", "user2:Role2:Role4", "user3:Role3:Role1:Role4", "user4:Role4:Role1:Role2", "user5:Role2:Role1", "user6:Role1:Role4" }; private static string[] RoleDB = { "Role1", "Role2", "Role3", "Role4" };
RoleExists (string rolename) プロパティは、ロール名の検索または解決に使用されます。
注意
ロールに対してはワイルドカードはサポートされていません。
GetRolesForUser メソッドは、ユーザーのクレーム (ロール) 情報を取得するために、ログオン時に SharePoint によって呼び出されます。
手順 2: メンバーシップとロール プロバイダーをビルドして展開する
次に、メンバーシップとロール プロバイダーをビルドして展開します。
メンバーシップとロール プロバイダーをビルドして展開するには
ContosoProviders を右クリックし、[リビルド] をクリックします。
ContosoProviders.dll をグローバル アセンブリ キャッシュに展開します。
手順 3: SharePoint Web アプリケーションを作成する
次に、SharePoint Web アプリケーションを作成します。
SharePoint Web アプリケーションを作成するには
[SharePoint 2010 サーバーの全体管理] ページを表示します。
[アプリケーション構成の管理] セクションで、[Web アプリケーションの管理] をクリックします。
Server リボンで、[新規作成] をクリックします。
[新しい Web アプリケーションの作成] ダイアログ ボックスの [認証] で、[クレーム ベースの認証] をクリックします。
[IIS Web サイト] セクションの [新しい IIS Web サイトを作成する] で、[名前] フィールドを SharePoint - Custom FBA に変更します。
ポート番号を 500 に変更します。
[クレーム認証の種類] セクションで、以下の操作を実行します。
[フォーム ベース認証 (FBA) の有効化] をクリックします。
その他の認証モードをオフにします。
メンバーシップ プロバイダー フィールドとロール マネージャー フィールドに、それぞれの名前を以下のとおりに小文字で入力します。
ASP.NET メンバーシップ プロバイダー名: custommembershipprovider
ASP.NET ロール マネージャー名: customroleprovider
メンバーシップとロール プロバイダーをまだセットアップしていませんが、これらは後の手順で作成します。
URL を http://intranet.contoso.com:500 に変更します。
[アプリケーション プール] で、[既存のアプリケーション プールを使用する] を選択し、[SharePointAppPool] を選択します。
[データベース名と認証] セクションで、データベース名を WSS_Content_500 に変更します。
その他の設定は既定のままにします。
[OK] をクリックして、Web アプリケーションを作成します。
手順 4: SharePoint Web アプリケーション用にメンバーシップとロール プロバイダーを構成する
変更を必要とする web.config ファイルが 3 つあります。
サーバーの全体管理。サイト コレクションに対する選択を可能にします。
Security Token Service。サインインおよびトークンの発行を可能にします。
FBA Web アプリケーション。ローカル Web アプリケーションに対する選択を可能にします。
SharePoint Web アプリケーション用にメンバーシップとロール プロバイダーを構成するには
カスタム FBA Web アプリケーション Web サイト用の web.config ファイルで、<membership> タグの Providers 要素の内部に次のエントリを追加します。
<add name="custommembershipprovider" type="ContosoProviders.Members, ContosoProviders, Version=1.0.0.0, Culture=neutral, PublicKeyToken=26fc91a86676aa9f" />
プロバイダーの値を追加した後の web.config ファイルは、図 1 のようになります。
図 1. カスタム FBA Web アプリケーションのプロバイダー値
図 2 のように、<RoleManager> セクションの Providers 要素に次のロール マネージャー要素を追加します。
<add name="customroleprovider" type="ContosoProviders.Roles, ContosoProviders, Version=1.0.0.0, Culture=neutral, PublicKeyToken=26fc91a86676aa9f" />
図 2. カスタム FBA Web アプリケーションのロール マネージャー値
サーバーの全体管理 Web サイトと SecurityTokenServiceApplication Web サイトの両方について、上述の手順を繰り返します。
注意
SharePoint STS Web サイト用の web.config ファイルには、<system.web> セクションがありません。このセクションを手動で追加する必要があります。web.config ファイルの例については、「ダウンロード コード: ClaimsExample-CreateFormsBasedAuthentication (英語)」を参照してください。これは記事「クレームに関するチュートリアル: ASP.NET SQL のメンバーシップ プロバイダーとロール プロバイダーを使用したクレーム ベースの SharePoint 2010 Web アプリケーション用のフォーム ベース認証の作成」で説明されています。
手順 5: フォーム ベース認証をテストする
次に、フォーム ベース認証をテストします。
フォーム ベース認証をテストするには
サーバーの全体管理 Web サイトで、[アプリケーション構成の管理] の [サイト コレクションの作成] をクリックします。
[Web アプリケーション] ドロップダウン リストで、カスタム FBA Web アプリケーションの http://intranet.contoso.com:500 を選択します。
図 3. カスタム FBA Web アプリケーションの構成
図 3 のように、タイトルを Custom FBA Site に変更します。
[ユーザー名] フィールドで、[参照] アイコンをクリックして、前に追加したユーザーを検索します。
図 4 のように、左のウィンドウで [フォーム認証] を選択し、検索ボックスに「user1」と入力し、検索ボタンをクリックします。
図 4. ユーザー選択ウィンドウでの user1 の検索
結果領域で [user1] をダブルクリックします。これにより、サイト コレクション作成ページに戻ります。
[OK] をクリックして、サイト コレクションを作成します。
http://intranet.contoso.com:500 を表示します。図 5 のようなログオン ページが表示されます。
図 5. ログオン ページ
ユーザー名資格情報として「user1」と入力し、[Sign In] をクリックします (パスワードとしては何を入力してもかまいません)。
ログオンすると、図 6 のように右上隅にユーザー名として user1 が表示されます。
図 6. 右上隅のユーザー名
手順 6: クレームを表示する
次に、クレームを表示します。
クレームを表示するには
Web パーツを作成します。RenderContent 関数を次のコードに置き換えます (この記事のダウンロードに含まれている FBAClaimsViewer.cs ファイルも参照してください)。
注意
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); } }
このソリューションを展開し、Web パーツを FBA Site Web サイト アプリケーションのホーム ページに追加します。
出力は図 7 のようになります。
図 7. クレームの種類とクレームの値の情報
次の 3 つのクレームに注目してください。
ClaimType: https://schemas.microsoft.com/ws/2008/06/identity/claims/role ClaimValue: Role1 Issuer: SharePoint Properties: 0 ClaimType: https://schemas.microsoft.com/ws/2008/06/identity/claims/role ClaimValue: Role2 Issuer: SharePoint Properties: 0 ClaimType: https://schemas.microsoft.com/ws/2008/06/identity/claims/role ClaimValue: Role3 Issuer: SharePoint Properties: 0
ロール クレームは ContosoProviders.Roles から取得されます。
リボンの [サイトの操作] で、[サイトの権限] をクリックし、[アクセス許可の付与] をクリックします。[参照] アイコンをクリックして、[ユーザー選択ウィンドウ] ダイアログ ボックスを開きます。
図 8 のように、「role2」と入力し、[検索] をクリックします。
図 8. ユーザー選択ウィンドウでの role2 の検索
Members グループへの role2 の追加を試み、次の点を確認してください。
現在、だれがこのサイトにログオンできるでしょうか。それはなぜですか。
role2 のユーザーを使用してログオンを試み、何か問題があるかどうかを調べてください。
まとめ
フォーム ベース認証は、Microsoft SharePoint Server 2010 でのカスタム ID 管理を提供します。ここでは、カスタムのメンバーシップとロール プロバイダーを使用してクレーム ベースの Web アプリケーション用にフォーム ベース認証を作成する方法を説明しました。
その他の技術情報
詳細については、次のリソースを参照してください。