注
この記事が作成されて以来、ASP.NET メンバーシップ プロバイダーは ASP.NET Identity に置き換えられました。 この記事の執筆時点で紹介したメンバーシップ プロバイダーではなく 、ASP.NET ID プラットフォームを使用するようにアプリを更新することを強くお勧めします。 ASP.NET ID には、ASP.NET メンバーシップ システムに比して、次のような多くの利点があります。
- パフォーマンスの向上
- 拡張性とテスト容易性の向上
- OAuth、OpenID Connect、および 2 要素認証のサポート
- クレームベースのアイデンティティサポート
- ASP.Net Core との相互運用性の向上
ASP.NET Web サイト管理ツール (WSAT) には、メンバーシップとロールの設定を構成したり、ユーザーとロールを作成、編集、削除したりするための Web ベースのユーザー インターフェイスが用意されています。 残念ながら、WSAT は localhost からアクセスした場合にのみ機能します。つまり、ブラウザーから運用 Web サイトの管理ツールにアクセスすることはできません。 良いニュースは、運用環境でユーザーとロールを管理できるようにする回避策があることです。 このチュートリアルでは、これらの回避策とその他について説明します。
イントロダクション
ASP.NET 2.0 では、多数の アプリケーション サービスが導入されました。これは、Web アプリケーションに追加できる構成要素サービスのスイートです。 「Application Services を使用する Web サイトの構成」チュートリアルで、Book Reviews Web サイトにメンバーシップサービスとロール サービスを追加しました。 メンバーシップ サービスは、ユーザー アカウントの作成と管理を容易にします。Roles サービスには、ユーザーをグループに分類するための API が用意されています。 書籍レビュー サイトには、Scott、Jisun、Alice の 3 つのユーザー アカウントと、1 つのロールである Admin があり、管理者ロールは Scott と Jisun です。
ASP。NET のアプリケーション サービスは、特定の実装に関連付けされていません。 代わりに、特定の プロバイダーを使用するようにアプリケーション サービスに指示し、そのプロバイダーは特定のテクノロジを使用してサービスを実装します。 メンバーシップ サービスとロール サービスに SqlMembershipProvider
プロバイダーと SqlRoleProvider
プロバイダーを使用するように Book Reviews Web アプリケーションを構成しました。 これら 2 つのプロバイダーは、ユーザー アカウントとロール情報を SQL Server データベースに格納し、Web ホスティング会社でホストされているインターネット ベースの Web アプリケーションで最もよく使用されるプロバイダーです。
メンバーシップおよびロール サービスを使用する開発者にとって一般的な課題は、運用環境でユーザーとロールを管理することです。 運用 Web サイトからユーザー アカウントを削除したり、新しいロールを追加したり、既存のユーザーを既存のロールに追加したりするにはどうすればよいですか? このチュートリアルでは、運用 Web サイトでユーザーとロールを管理するためのさまざまな手法について説明します。
ASP.NET Web サイト管理ツールの使用
ASP.NET には、ユーザー アカウントとロールの作成と管理、およびユーザーベースおよびロールベースの承認規則の指定を容易にする Web サイト管理ツール (WSAT) が含まれています。 WSAT を使用するには、ソリューション エクスプローラーで [ASP.NET 構成] アイコンをクリックするか、[Web サイト] メニューまたは [プロジェクト] メニューに移動し、ASP.NET 構成オプションを選択します。 どちらの方法でも Web ブラウザーが起動し、次のようなアドレスで WSAT にポイントされます。 http://localhost:portNumber/asp.netwebadminfiles/default.aspx?applicationPhysicalPath=pathToApplication
WSAT は、次の 3 つのセクションに分かれています。
- セキュリティ - ユーザー、ロール、および承認規則を管理します。
- ApplicationConfiguration - ここから <appSettings> および SMTP 設定を管理します。 アプリケーションをオフラインにして、ここからデバッグとトレースの設定を管理したり、既定のカスタム エラー ページを指定したりすることもできます。
- ProviderConfiguration - アプリケーション サービスによって使用されるプロバイダーを構成します。
[セキュリティ] セクション ( 図 1 を参照) には、新しいユーザーの作成、ユーザーの管理、ロールの作成と管理、アクセス規則の作成と管理に関するリンクが含まれています。 ここから、システムに新しいロールを追加したり、既存のユーザーを削除したり、特定のユーザー アカウントのロールを追加または削除したりすることができます。
図 1: WSAT セキュリティ セクションには、ユーザーとロールを管理するためのオプションが含まれています
(クリックするとフルサイズの画像が表示されます)
残念ながら、WSAT にはローカルでのみアクセスできます。 リモート運用 Web サイトで WSAT にアクセスすることはできません。 www.yoursite.com/asp.netwebadminfiles/default.aspx
にアクセスすると、404 Not Found 応答が表示されます。 WSAT を機能させるコードでは、.NET Framework の Membership
クラスと Roles
クラスを使用して、ユーザーとロールを作成、編集、削除します。 これらのクラスは、Web アプリケーションの構成情報を参照して、使用するプロバイダーを決定します。 「Application Services を使用する Web サイトの構成 」チュートリアル に戻り、 SqlMembershipProvider
および SqlRoleProvider
プロバイダーを使用するように Book Reviews Web サイトを設定します。 これには、 <membership>
セクションと <roleManager>
セクションを Web.config
に追加する必要があります。
<?xml version="1.0"?>
<configuration>
...
<connectionStrings configSource="ConfigSections\databaseConnectionStrings.config" />
<system.web>
...
<membership defaultProvider="ReviewMembership">
<providers>
<clear />
<add type="System.Web.Security.SqlMembershipProvider"
name="ReviewMembership"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="ReviewRole">
<providers>
<clear />
<add type="System.Web.Security.SqlRoleProvider"
name="ReviewRole"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</roleManager>
</system.web>
...
</configuration>
<membership>
セクションと<roleManager>
セクションは、SqlMembershipProvider
属性のSqlRoleProvider
プロバイダーとtype
プロバイダーをそれぞれ参照することに注意してください。 これらのプロバイダーは、指定された SQL Server データベースにユーザーとロールの情報を格納します。 これらのプロバイダーによって使用されるデータベースは、connectionStringName
ファイルで定義されているReviewsConnectionString
~/ConfigSections/databaseConnectionStrings.config
属性によって指定されます。 開発環境の databaseConnectionStrings.config
ファイルには開発データベースへの接続文字列が含まれているのに対し、運用環境の databaseConnectionStrings.config
ファイルには実稼働データベースへの接続文字列が含まれていることを思い出してください。
簡単に言うと、WSAT は開発環境を介してローカルにアクセスする必要があり、 databaseConnectionStrings.config
ファイルで指定されたデータベース内のユーザーとロールの情報と連携します。 そのため、開発環境の databaseConnectionStrings.config
ファイルの接続文字列情報を変更した場合、WSAT をローカルで使用して、運用環境のユーザーとロールを管理できます。
この機能を説明するには、開発環境で Visual Studio で databaseConnectionStrings.config
ファイルを開き、開発データベースの接続文字列を実稼働データベース接続文字列に置き換えます。 次に、WSAT を起動し、[セキュリティ] タブに移動し、Sam という名前の新しいユーザーを追加します。
図 2 は、このアカウントを作成するときの WSAT 画面を示しています。
図 2: 運用環境で Sam という名前の新しいユーザーを作成する
(クリックするとフルサイズの画像が表示されます)
databaseConnectionStrings.config
の接続文字列が実稼働データベース サーバーを指すように変更されたため、Sam は運用環境でユーザーとして追加されました。 これを確認するには、 databaseConnectionStrings.config
ファイル内の接続文字列を開発データベースに戻し、開発環境の Login.aspx
ページにアクセスします。 Sam としてサインインしてみてください ( 図 3 を参照)。
図 3: 開発環境で Sam としてサインインできない
(クリックするとフルサイズの画像が表示されます)
ユーザー アカウント情報がローカル データベースに存在しないため、開発環境で Sam としてサインインすることはできません。 むしろ、運用データベースに追加されました。 これを確認するには、開発データベースと運用データベースの両方で aspnet_Users
テーブルの内容を表示します。 開発環境では、ユーザー Scott、Jisun、Alice のレコードは 3 つのみです。 ただし、運用データベースの aspnet_Users
テーブルには、Scott、Jisun、Alice、Sam の 4 つのレコードがあります。 その結果、Sam は運用環境で Web サイトを介してサインインできますが、開発環境ではサインインできません。
図 4: Sam は運用 Web サイトにサインインできます
(クリックするとフルサイズの画像が表示されます)
注
WSAT の操作が完了したら、 databaseConnectionStrings.config
ファイル内の接続文字列を開発データベースの接続文字列に変更することを忘れないでください。そうしないと、開発環境を使用してサイトをテストするときに運用データを操作することになります。 また、先ほど説明した手法では、WSAT を使用してユーザーとロールをリモートで管理できる一方で、他の WSAT 構成オプション (アクセス 規則、SMTP 設定、デバッグおよびトレース設定など) に対する変更によって、 Web.config
ファイルが変更される点にも注意してください。 そのため、設定に加えられた変更は開発環境に適用され、運用環境には適用されません。
カスタム ユーザーおよびロール管理 Web ページの作成
WSAT は、ユーザーとロールを管理するためのすぐに使用できるシステムを提供しますが、ローカルでのみ起動でき、運用環境でユーザーとロールを管理するために接続文字列情報を変更する必要があります。 ユーザー アカウントをサポートするほとんどの Web サイトには、管理者がサイト内のページからユーザーとロールを管理できるようにする多数のユーザーおよびロール管理 Web ページも含まれています。 このような Web ベースの管理ページを使用すると、ユーザーとロールの管理がはるかに容易になり、特に、多くの管理者がいる、または Visual Studio を使用してWSATを起動するための技術的スキルを持たない管理者がいるサイトでは必須です。
ASP.NET には、これらの管理 Web ページの多くをドラッグ アンド ドロップのように簡単に実装できるログイン関連の Web コントロールが多数組み込まれています。 たとえば、CreateUserWizard コントロールをページにドラッグし、いくつかのプロパティを設定することで、管理者が新しいユーザー アカウントを作成するためのページを作成できます。 実際、 図 2 に示す WSAT でユーザーを作成するためのページでは、ページに追加できるのと同じ CreateUserWizard コントロールが使用されています。 さらに、メンバーシップ サービスとロール サービスの機能は、.NET Framework の Membership
クラスと Roles
クラスを通じてプログラムで使用できます。 これらのクラスを使用すると、ユーザーとロールを作成、編集、削除したり、ロールにユーザーを追加または削除したり、どのユーザーがどのロールに含まれるかを判断したり、他のユーザーおよびロール関連のタスクを実行したりするコードを記述できます。
Application Services を使用する Web サイトの構成に関するチュートリアルで、Admin
という名前のCreateAccount.aspx
フォルダーにページを追加しました。 このページでは、管理者がサイトに新しいユーザー アカウントを追加し、新しく作成したユーザーが管理者ロールに含まれているかどうかを指定できます ( 図 5 を参照)。
図 5: 管理者が新しいユーザー アカウントを作成できる
(クリックするとフルサイズの画像が表示されます)
ユーザーとロールの管理ページの構築の詳細と、 Membership
クラスと Roles
クラス、ログイン関連の ASP.NET Web コントロールの使用に関する詳細な手順については、 Web サイトのセキュリティ に関するチュートリアルを参照してください。 新しいアカウントの作成、ロールの作成と管理、ロールへのユーザーの割り当て、その他の一般的な管理タスクに関する Web ページの構築方法に関するガイダンスがあります。
運用 Web サイトに WSAT に似た機能を実装するには、WSAT の機能を実装する独自の一連の Web ページをいつでも構築できます。 作業を開始するには、フォルダー %WINDIR%\Microsoft.NET\Framework\v2.0.50727\ASP.NETWebAdminFiles
にある WSAT ソース コードを確認してください。 もう 1 つのオプションは、Dan Clem の WSAT の代替手段を使用することです。これは、記事「Rolling Your Own Web Site Administration Tool」で共有しています。 Dan は、WSAT に似たカスタム ツールを構築するプロセスについて説明し、ダウンロード用のアプリケーションのソース コード (C#) を含め、ホストされている Web サイトにカスタム WSAT を追加するための詳細な手順を説明します。
概要
ASP.NET Web サイト管理ツール (WSAT) は、Membership and Roles アプリケーション サービスと組み合わせて使用して、Web サイトのユーザーとロールの情報を管理できます。 残念ながら、WSAT にはローカルでのみアクセスでき、運用 Web サイトからアクセスすることはできません。 ただし、運用環境のデータベースを指すように開発環境の接続文字列を変更することで、WSAT を使用して運用 Web サイトのユーザーとロールを管理できます。
WSAT アプローチを使用すると、ユーザーとロールをすばやく簡単に管理できるようになりますが、Visual Studio から WSAT を起動し、接続文字列情報を一時的に変更する必要があります。 WSAT は、運用環境でユーザーとロールを簡単に管理する方法を提供しますが、煩雑で、複数の管理者や、Visual Studio と WSAT を持っていない、または使い慣れていない管理者がいる Web サイトではうまく機能しません。 このような理由から、ユーザー アカウントをサポートするほとんどの Web サイトには、一連の管理 Web ページが含まれています。 このような一連の Web ページにより、WSAT が不要になり、あらゆるコンピューターからのさまざまな管理ユーザーが使用できます。
プログラミングに満足!
もっと読む
この記事で説明したトピックの詳細については、次のリソースを参照してください。
- ASP.NET のメンバーシップ、ロール、およびプロファイルの調査
- 独自に作る Web サイト管理ツール
- Web サイト管理ツールの概要
- Web サイトのセキュリティに関するチュートリアル