運用 Web サイトのユーザーとロール (VB)

作成者: Scott Mitchell

注意

この記事が作成されて以来、ASP.NET メンバーシップ プロバイダーは 、ASP.NET ID に置き換えられました。 この記事の執筆時点で取り上げられたメンバーシップ プロバイダーではなく 、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 サイトの構成に関するチュートリアルで、ブック レビュー Web サイトにメンバーシップサービスとロール サービスを追加しました。 メンバーシップ サービスは、ユーザー アカウントの作成と管理を容易にします。Roles サービスには、ユーザーをグループに分類するための API が用意されています。 ブック レビュー サイトには、Scott、Jisun、Alice の 3 つのユーザー アカウントと、管理ロールに Scott と Jisun を含む 1 つのロール (管理) があります。

Asp。NET のアプリケーション サービスは、特定の実装に関連付けられません。 代わりに、特定の プロバイダーを使用するようにアプリケーション サービスに指示し、そのプロバイダーは特定のテクノロジを使用してサービスを実装します。 メンバーシップ サービスとロール サービスの プロバイダーと SqlRoleProvider プロバイダーをSqlMembershipProvider使用するように Book Reviews Web アプリケーションを構成しました。 これら 2 つのプロバイダーは、ユーザー アカウントとロール情報をSQL Server データベースに格納し、Web ホスティング会社でホストされているインターネット ベースの Web アプリケーションで最もよく使用されるプロバイダーです。

Membership and Roles サービスを使用する開発者にとって一般的な課題は、運用環境でユーザーとロールを管理することです。 運用 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 を参照) には、新しいユーザーの作成、ユーザーの管理、ロールの作成と管理、アクセス 規則の作成と管理に関するリンクが含まれています。 ここから、システムに新しいロールを追加したり、既存のユーザーを削除したり、特定のユーザー アカウントに対してロールを追加または削除したりできます。

A S P のスクリーンショット。N E T Web サイト管理ツールを使用して、ユーザーとロールとアクセス 規則を作成および管理します。

図 1: WSAT セキュリティ セクションには、ユーザーとロールを管理するためのオプションが含まれています
(クリックするとフルサイズの画像が表示されます)

残念ながら、WSAT にはローカルでのみアクセスできます。 リモート運用 Web サイトの WSAT にアクセスすることはできません。アクセスすると www.yoursite.com/asp.netwebadminfiles/default.aspx 、404 Not Found 応答が表示されます。 WSAT を機能させるコードでは、.NET Frameworkの クラスと Roles クラスを使用Membershipして、ユーザーとロールを作成、編集、および削除します。 これらのクラスは、Web アプリケーションの構成情報を参照して、使用するプロバイダーを決定します。Application Services を使用する Web サイトの構成に関するチュートリアルに戻り、および プロバイダーを使用するようにブック レビュー Web サイトをSqlMembershipProviderSqlRoleProvider設定します。 これには、 に セクションと <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>

<membership>セクションと <roleManager> セクションは、それぞれ 属性の プロバイダーと SqlRoleProvider プロバイダーをtype参照SqlMembershipProviderすることに注意してください。 これらのプロバイダーは、指定した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 画面を示しています。

A S P のスクリーンショット。N E T Web サイト管理ツールを使用して、運用環境で新しいユーザーを作成します。

図 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 サイトを介してサインインできますが、開発環境ではサインインできません。

新しいユーザーが作成したログイン画面のスクリーンショット。運用環境の 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 サイトの構成に関するチュートリアルで、 という名前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 の代替手段を使用することです。これは、記事「Rolling Your Own Web Site Administration Tool」で共有しています。 Dan は、WSAT に似たカスタム ツールを構築するプロセスを読者に説明し、アプリケーションのダウンロード用のソース コード (C#) を含め、ホストされている Web サイトにカスタム WSAT を追加するための詳細な手順を説明します。

まとめ

ASP.NET Web サイト管理ツール (WSAT) は、メンバーシップおよびロール アプリケーション サービスと組み合わせて使用して、Web サイトのユーザーとロールの情報を管理できます。 残念ながら、WSAT はローカルでのみアクセスでき、運用 Web サイトからアクセスすることはできません。 ただし、運用環境のデータベースを指すように開発環境の接続文字列を変更することで、WSAT を使用して運用 Web サイトのユーザーとロールを管理できます。

WSAT アプローチを使用すると、ユーザーとロールをすばやく簡単に管理できるようになりますが、Visual Studio から WSAT を起動し、接続文字列情報を一時的に変更する必要があります。 WSAT は、運用環境でユーザーとロールを簡単に管理する方法を提供しますが、面倒で、複数の管理者がいる Web サイトや、Visual Studio と WSAT を持っていない、または使い慣れていない管理者がいる Web サイトではうまく機能しません。 このような理由から、ユーザー アカウントをサポートするほとんどの Web サイトには、一連の管理 Web ページが含まれています。 このような一連の Web ページを使用すると、WSAT が不要になり、任意のコンピューターからのさまざまな管理ユーザーが使用できます。

幸せなプログラミング!

もっと読む

このチュートリアルで説明するトピックの詳細については、次のリソースを参照してください。