ASP.NET 2.0ログインコントロール+ MySQL、VS2008、サイトでのユーザー認証

確立されたASP.NETツールを使用すると、サイトの特定のページへのユーザーアクセス権を制限するプロセスを簡素化できます。 ログインコントロールをMySQLデータベースと組み合わせて使用​​して、ASP.NETサイトのユーザーを承認することです。 認証に成功すると、プロジェクトディレクトリの指定されたロールに対応する別のページにリダイレクトされます。









ツールバーの「ログイン」タブの通常のコントロールにより、ユーザー認証に関連するすべてを実装できます。 ユーザーデータはデータベース、特にMySQLに保存されます。 さらに、必要なデータベーステーブルが自動的に作成されます。 コントロールは、データベースと独立して相互作用します。 特別な場合には、追加のコードを記述する必要はありません。



ASP.NETログインコントロールは、HTTP経由のプレーンテキストを使用して機能します。 セキュリティのために、SSL暗号化でHTTPSを使用できます。



タスクの説明はスキップできます。

現在のタスクは、4つのカテゴリのユーザーのアクセス権を区別することです。 0 * 1 * 2 * 3 *。 0 *私は最上位のカテゴリであり、下位カテゴリを作成できます。 残りのカテゴリにも同じスキームが提供されます。 各カテゴリには、独自のページセットがあります。 適切な権限を持つ既存のユーザーのみがユーザーを追加できます。 つまり ユーザーの自己登録はありません。 最も優先度の高いページには、すべての下位ページが含まれ、表示、下位ページのすべての設定の変更が可能です。

カテゴリ3 *のユーザーは、最小限の機能セットでのみデータを表示できます。 2 *カテゴリーのユーザーは、3 *カテゴリー+特殊設定のすべての機能を持ち、3 *カテゴリーのユーザーのツリー/リスト、3 *カテゴリーのユーザーを作成、削除する機能を含みます。 2 *および0 *カテゴリーのユーザーには、すべての従属カテゴリーも含まれ、従属ユーザーの設定を変更できます。 一般的に、それはロシアの人形に変わり、より高いカテゴリーのユーザーは、より低いカテゴリーのユーザーと追加機能が見るものすべてを見るでしょう。 3番目のカテゴリのユーザーのページは、テンプレート(ヘッダー本文フッター)+本文の「3番目」のWebユーザーコントロールのように見えます。 2番目のカテゴリのユーザーのページは、同じテンプレート+本文の「2番目」のWebユーザーコントロールであり、マークアップ+「3番目」のWebユーザーコントロールが含まれています。 また、1番目の*および0 *カテゴリについても同じ原則です。



これはすべて幻想です。 この記事では、4つのフォルダーの承認の実装について説明します。各フォルダーには独自の.aspxページが含まれます。



WebアプリケーションまたはWebサイトプロジェクトは既に作成されていると考えています。 VS2008フレームワーク3.5。 Login.aspxページが作成され、ログインコントロールが配置されます。



Visual Studio 2012は、MySQL Connector / Net 6.6以降でサポートされています。

Visual Studio 2010は、MySQL Connector / Net 6.3.2以降のバージョンでサポートされています。以前のバージョンのConnectorを使用するアプリケーションは、.NET 2.xフレームワークを介してVisual Studio 2010で使用できます。

Visual Studio 2008は、MySQL Connector / Net 6.4のみをサポートします。



公式のMySQLサイトから、.NETおよびMONO mysql-connector-net-6.4.6-noinstall.zipおよびWindows mysql-connector-net-6.4.6.msiのConnector / Net 6.4.6ライブラリをダウンロードします。



mysql-connector-net-6.4.6.msiをインストールします。これにより、ファイル構成も構成されます。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config
      
      





これは重要なポイントです。なぜなら 最初は、いくつかの記事の推奨事項に基づいて、.msiをインストールせずにmachine.config v2を手動で編集し始めました。 アイコンMySQL Webサイト設定ツールは、以降の設定ではまだ表示されません。



VS2008に間違ったバージョンのmysql-connectorをインストールすると、ASP.NET構成->セキュリティ/セキュリティ->ステップバイステップセキュリティ構成ウィザードの起動時に次のエラーを確認できます。

  .       .       :      "MySql.Web, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"       .     .  System.RuntimeTypeHandle._GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName)  System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)  System.RuntimeType.PrivateGetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)  System.Type.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase)  System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase)  System.Web.Configuration.ConfigUtil.GetType(String typeName, String propertyName, ConfigurationElement configElement, XmlNode node, Boolean checkAptcaBit, Boolean ignoreCase)
      
      





アーカイブディレクトリのv2(mysql-connector-net-6.4.6-noinstall.zip)から次の.dllをWebアプリケーションプロジェクトのbinディレクトリにコピーします。

V2 \ mysql.data.dll

V2 \ mysql.web.dll



MySql.DataおよびMySql.Webへの参照を追加します。



web.configで、次を追加します。

 <!-- <connectionStrings/> --> <connectionStrings> <remove name="LocalMySqlServer"/> <add name="LocalMySqlServer" connectionString="Server=sta.tic.ip4.adr; Database=MySQLBaseName; uid=user; pwd=password;" providerName="MySql.Data.MySqlClient"/> </connectionStrings>
      
      





私たちはWindowsでプロジェクトを開発しています; FreeBSD + apache2 + monoで動作します。 すべてを「本物」にするには、外部の静的IPを備えた本物のFreeBSDサーバーで、MySql55データベースとパスワードを持つユーザーを作成します。 したがって、必要に応じて、ファイアウォール設定とポート転送を行います。 テーブルは後で自動的に作成されます。 もちろん、しばらくの間とデバッグのためだけに、インターネット全体のMySQLデータベースを開きます。

データベースとユーザーを作成します。

 # mysql -u root -p Enter password: mysql> create database MySQLBaseName; Query OK, 1 row affected (0.00 sec) mysql> CREATE USER 'user'@'sta.tic.ip4.adr' IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON MySQLBaseName.* TO 'user'@'sta.tic.ip4.adr' IDENTIFIED BY 'password' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> quit
      
      





VS2008 VistaからリモートMySqlデータベースへの接続の確認:



ログインページで、Label ErrorLを追加します。ここに、現在のページのデバッグメッセージが表示されます。 データベースへの接続に問題がある場合、接続を試行する手順は10秒かかり、エラーが表示されます。



次に、Page_LoadのLogin.aspx.csに以下を追加します。

 using MySql.Data; using MySql.Data.MySqlClient; protected void Page_Load(object sender, EventArgs e) { //    MySql string CommandText = ""; string Connect = "Database=MySQLBaseName;Data Source=sta.tic.ip4.adr;User Id=user;Password=password"; MySqlConnection myConnection = new MySqlConnection(Connect); MySqlCommand myCommand = new MySqlCommand(CommandText, myConnection); try { myConnection.Open(); string dd = myConnection.Database; string dd1 = myConnection.DataSource; string dd2 = myConnection.ServerVersion; ConnectionState cs = myConnection.State; myConnection.Close(); } catch (MySqlException ex) { switch (ex.Number) { case 0: ErrorL.Text = "Error 0. Cannot connect to server"; break; case 1045: ErrorL.Text = "Error 1045. Invalid username/password, please try again"; break; case 1042: ErrorL.Text = "Error 1042. Unable to connect to any of the specified MySQL hosts"; break; } } }
      
      





「接続」行で、値を置き換えます。



Page_Loadのラベルを使用してステップバイステップの実行を開始し、接続が成功した場合はmyConnection.Open(); すぐに実行すると、次の変数に対応する値が設定されます。 データベースとデータベースへのアクセスが構成されていると考えています。



ログインコントロールのプロパティに、パラメーターを記述します。

MembershipProvider = MySQLMembershipProvider



MySQL Webサイト構成ツールアイコンを表示するには、サーバーエクスプローラーでデータ接続を構成する必要があります。 サーバーエクスプローラー->データ接続->接続の追加...->









この場合のサーバー名は、MySQLを使用したリモートサーバーの静的IPv4アドレスです。

これで、ハンマーの付いた緑色の丸アイコンの隣に、MySQL Webサイト構成ツールアイコンが、下の画像のように、キー画像とおそらくドライバーから白い十字の付いた、異種の明るい青色の円を表示するはずです。





MySQL Webサイト設定ツールを使用して、必要な多くのパラメーターを設定/変更できます。 これらの設定またはそれらの設定の目的のコンテキストを把握できます。



Web管理ツールを使用して最初のユーザーを構成し、役割とアクセス権を配布します。 また、必要なテーブルMySqlデータベースを自動的に構成します。 さらに、サイトの通常の機能により、実装されているタスクで、他のユーザーがユーザーを追加します。



プロジェクトディレクトリに4pディレクトリを作成します。

... / dir / a0

... / dir / a1

... / dir / a2

... / dir / a3

ASP.NETページへのアクセスは、安全なフォルダーに配置することにより制限されます。



[ASP.NET構成]-> [プロバイダー]タブで、次のようになります。







[セキュリティ]タブで、セキュリティ設定ウィザードを使用して、フォルダーと以前に作成したロールをマップします。 便宜上、フォルダー名=ロール名。 次に、作成したユーザーを以前に作成したロールにマッピングします。 つまり フォルダーに役割を割り当て、必要な以前に作成されたユーザーを役割に含める必要があります。



サーバー上のデータベーステーブルを見てみましょう。

#mysql -u root -p

パスワードを入力してください:

mysql> use MySQLBaseName;

mysql> SHOW TABLES;

+ -------------------------- +

| Tables_in_MySQLBaseName |

+ -------------------------- +

| my_aspnet_applications |

| my_aspnet_membership |

| my_aspnet_profiles |

| my_aspnet_roles |

| my_aspnet_schemaversion |

| my_aspnet_sessioncleanup |

| my_aspnet_sessions |

| my_aspnet_users |

| my_aspnet_usersinroles |

+ -------------------------- +

セット内の9行(0.00秒)

mysql> quit



つまり リモートサーバーでは、以前に作成されたデータベースのテーブルが自動的に作成されます。

サーバーエクスプローラー->データ接続でも同じことがわかります。



なぜなら 各ロールの入力は、独自のページa0.aspx、a1.aspx、a2.aspx、a3.aspxで行う必要があります。 次に、Event LoggedInをLoginコントロールに設定し、ログインに成功した後、対応するページに移動するようにします。



 protected void Login1_LoggedIn(object sender, EventArgs e) { if (Roles.IsUserInRole(Login1.UserName, "a0")) { Response.Redirect("~/dir/a0/a0.aspx"); return; } if (Roles.IsUserInRole(Login1.UserName, "a1")) { Response.Redirect("~/dir/a1/a1.aspx"); return; } if (Roles.IsUserInRole(Login1.UserName, "a2")) { Response.Redirect("~/dir/a2/a2.aspx"); return; } if (Roles.IsUserInRole(Login1.UserName, "a3")) { Response.Redirect("~/dir/a3/a3.aspx"); return; } }
      
      





プロジェクトを開始し、パスワードの名前を入力し、ロールのユーザーのメンバーシップに応じて、対応するページへの遷移を観察します



All Articles