運用 Web サイトのユーザーとロール (C#)
注意
この記事が作成されて以来、ASP.NET メンバーシップ プロバイダーは ASP.NET Identity に置き換えられました。 この記事の執筆時点で取り上げられたメンバーシップ プロバイダーではなく 、ASP.NET ID プラットフォームを使用するようにアプリを更新することを強くお勧めします。 ASP.NET ID には、ASP.NET メンバーシップ システムに比して、次のような多くの利点があります。
- パフォーマンスの向上
- 拡張性とテスト性の向上
- OAuth、OpenID Connect、および 2 要素認証のサポート
- クレームベースの ID のサポート
- ASP.Net Core との相互運用性の向上
ASP.NET Web サイト管理ツール (WSAT) には、メンバーシップとロールの設定を構成したり、ユーザーとロールを作成、編集、削除したりするための Web ベースのユーザー インターフェイスが用意されています。 残念ながら、WSAT は localhost からアクセスした場合にのみ機能します。つまり、ブラウザーから運用 Web サイトの管理ツールにアクセスすることはできません。 良いニュースは、運用環境でユーザーとロールを管理できるようにする回避策があることです。 このチュートリアルでは、これらの回避策とその他について説明します。
はじめに
ASP.NET 2.0 では、多数の アプリケーション サービスが導入されました。これは、Web アプリケーションに追加できる構成要素サービスのスイートです。 Application Services を使用する Web サイトの構成に関するチュートリアルで、Book Reviews Web サイトに Membership サービスと Roles サービスを追加しました。 メンバーシップ サービスは、ユーザー アカウントの作成と管理を容易にします。Roles サービスには、ユーザーをグループに分類するための API が用意されています。 Book Reviews サイトには、Scott、Jisun、Alice の 3 つのユーザー アカウントと、管理 ロールに Scott と Jisun を含む 1 つのロール (管理) があります。
Asp。NET のアプリケーション サービスは、特定の実装に関連付けされていません。 代わりに、特定の プロバイダーを使用するようにアプリケーション サービスに指示し、そのプロバイダーは特定のテクノロジを使用してサービスを実装します。 メンバーシップおよびロール サービスの プロバイダーと SqlRoleProvider
プロバイダーをSqlMembershipProvider
使用するように 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の クラスと Roles
クラスを使用Membership
して、ユーザーとロールを作成、編集、削除します。 これらのクラスは、Web アプリケーションの構成情報を調べて、使用するプロバイダーを決定します。Application Services を使用する Web サイトの構成に関するチュートリアルに戻り、 プロバイダーと SqlRoleProvider
プロバイダーを使用するように Book Reviews Web サイトをSqlMembershipProvider
設定します。 これには、 に セクションと <roleManager>
セクションを追加<membership>
する必要があります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>
セクションと <roleManager>
セクションは、それぞれ 属性の SqlMembershipProvider
プロバイダーと SqlRoleProvider
プロバイダーをtype
参照することに<membership>
注意してください。 これらのプロバイダーは、指定したSQL Server データベースにユーザーとロールの情報を格納します。 これらのプロバイダーによって使用されるデータベースは、 ReviewsConnectionString
ファイルで定義されている 属性 によってconnectionStringName
~/ConfigSections/databaseConnectionStrings.config
指定されます。 開発環境の databaseConnectionStrings.config
ファイルには開発データベースへの接続文字列が含まれているのに対し、運用環境の databaseConnectionStrings.config
ファイルには実稼働データベースへの接続文字列が含まれていることを思い出してください。
簡単に言うと、WSAT は開発環境を介してローカルにアクセスする必要があり、ファイルで指定されたデータベース内のユーザーとロールの情報と databaseConnectionStrings.config
連動します。 したがって、開発環境でファイル内の接続文字列情報を databaseConnectionStrings.config
変更すると、WSAT をローカルで使用して、運用環境のユーザーとロールを管理できます。
この機能を説明するには、開発環境の Visual Studio で ファイルを開 databaseConnectionStrings.config
き、開発データベースの接続文字列を実稼働データベース接続文字列に置き換えます。 次に、WSAT を起動し、[セキュリティ] タブに移動し、パスワード "password!" を使用して 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 Can sign in on the Production Website
(クリックするとフルサイズの画像が表示されます)
注意
WSAT の操作が完了したら、ファイル内 databaseConnectionStrings.config
の接続文字列を開発データベースの接続文字列に戻すことを忘れないでください。そうしないと、開発環境を使用してサイトをテストするときに運用データを操作することになります。 また、先ほど説明した手法を使用すると、WSAT を使用してユーザーとロールをリモートで管理できる一方で、他の WSAT 構成オプション (アクセス 規則、SMTP 設定、デバッグとトレースの設定など) に対する変更によってファイルが Web.config
変更される点にも注意してください。 そのため、設定に加えられた変更は開発環境に適用され、運用環境には適用されません。
カスタム ユーザーおよびロール管理 Web ページの作成
WSAT は、ユーザーとロールを管理するためのすぐに使用できるシステムを提供しますが、ローカルでのみ起動でき、運用環境のユーザーとロールを管理するために接続文字列情報を変更する必要があります。 ユーザー アカウントをサポートするほとんどの Web サイトには、管理者がサイト内のページからユーザーとロールを管理できるようにする多数のユーザーおよびロール管理 Web ページも含まれています。 このような Web ベースの管理ページを使用すると、ユーザーとロールの管理がはるかに簡単になり、アクセスできない管理者や管理者が多いサイトや、Visual Studio を使用して WSAT を起動するための技術的な背景があるサイトに不可欠です。
ASP.NET には、これらの管理 Web ページの多くをドラッグ アンド ドロップと同じくらい簡単に実装できるようにする、ログイン関連の Web コントロールが多数組み込まれています。 たとえば、CreateUserWizard コントロールをページにドラッグし、いくつかのプロパティを設定することで、管理者が新しいユーザー アカウントを作成するためのページを作成できます。 実際、 図 2 に示す WSAT でユーザーを作成するためのページでは、ページに追加できるのと同じ CreateUserWizard コントロールが使用されています。 さらに、Membership サービスと Roles サービスの機能は、.NET Frameworkの Membership
クラスと Roles
クラスを通じてプログラムで使用できます。 これらのクラスを使用すると、ユーザーとロールを作成、編集、削除したり、ロールにユーザーを追加または削除したり、ロールに含まれるユーザーを決定したり、他のユーザーおよびロール関連のタスクを実行したりするためのコードを記述できます。
Application Services を使用する Web サイトの構成に関するチュートリアルで、 という名前CreateAccount.aspx
のフォルダーにページをAdmin
追加しました。 このページを使用すると、管理者はサイトに新しいユーザー アカウントを追加し、新しく作成したユーザーが管理ロールに属しているかどうかを指定できます (図 5 を参照)。
図 5: 管理者は新しいユーザー アカウントを作成できる
(クリックするとフルサイズの画像が表示されます)
ユーザーとロールの管理ページの構築の詳細と、 クラスとRoles
ログイン関連の ASP.NET Web コントロールの使用Membership
に関する詳細な手順については、「Web サイトセキュリティチュートリアル」を参照してください。 ここでは、新しいアカウントの作成、ロールの作成と管理、ロールへのユーザーの割り当て、およびその他の一般的な管理タスク用の Web ページを作成する方法に関するガイダンスを紹介します。
運用 Web サイトで WSAT に似た機能を実装するには、WSAT の機能を実装する独自の一連の Web ページをいつでも構築できます。 作業を開始するには、 フォルダー%WINDIR%\Microsoft.NET\Framework\v2.0.50727\ASP.NETWebAdminFiles
にある WSAT ソース コードをチェックします。 もう 1 つのオプションは、Dan Clem の WSAT の代替手段を使用することです。これは、自分の Web サイト管理ツールのローリングに関する記事で共有しています。 Dan は、カスタム WSAT に似たツールを構築するプロセスについて読者に説明し、アプリケーションのダウンロード用のソース コード (C#) を含め、ホストされている Web サイトにカスタム WSAT を追加するための詳細な手順を説明します。
まとめ
ASP.NET Web サイト管理ツール (WSAT) を Membership and Roles アプリケーション サービスと組み合わせて使用して、Web サイトのユーザーとロールの情報を管理できます。 残念ながら、WSAT にはローカルでのみアクセスでき、運用 Web サイトからはアクセスできません。 ただし、運用環境の接続文字列を運用環境のデータベースを指すように変更することで、WSAT を使用して運用 Web サイトのユーザーとロールを管理できます。
WSAT アプローチを使用すると、ユーザーとロールをすばやく簡単に管理できるようになりますが、Visual Studio から WSAT を起動する必要があり、接続文字列情報の一時的な変更も必要です。 WSAT は、運用環境でユーザーとロールを簡単に管理する方法を提供しますが、煩雑で、複数の管理者を持つ Web サイトや、Visual Studio と WSAT を持っていない、または使い慣れていない管理者の Web サイトではうまく機能しません。 これらの理由から、ユーザー アカウントをサポートするほとんどの Web サイトには、一連の管理 Web ページが含まれています。 このような一連の Web ページを使用すると、WSAT が不要になり、任意のコンピューターからのさまざまな管理ユーザーが使用できます。
プログラミングに満足!
もっと読む
このチュートリアルで説明するトピックの詳細については、次のリソースを参照してください。
- ASP を調べる。NET のメンバーシップ、ロール、およびプロファイル
- 独自の Web サイト管理ツールのローリング
- Web サイト管理ツールの概要
- Web サイトのセキュリティに関するチュートリアル
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示