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

作成者: Scott Mitchell

注意

この記事が作成されて以来、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 を参照)。

開発環境で Sam としてサインインできないことを示すスクリーンショット。

図 3: 開発環境で Sam としてサインインできない
(クリックするとフルサイズの画像が表示されます)

ユーザー アカウント情報がローカル データベースに存在しないため、開発環境で Sam としてサインインすることはできません。 ではなく、 が運用データベースに追加されました。 これを確認するには、開発データベースと運用データベースの両方でテーブルの aspnet_Users 内容を表示します。 開発環境では、ユーザー Scott、Jisun、Alice のレコードは 3 つだけである必要があります。 ただし、 aspnet_Users 運用データベースのテーブルには、Scott、Jisun、Alice、Sam の 4 つのレコードがあります。 その結果、Sam は運用環境で Web サイトを介してサインインできますが、開発環境ではサインインできません。

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 が不要になり、任意のコンピューターからのさまざまな管理ユーザーが使用できます。

プログラミングに満足!

もっと読む

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