カスタム MySQL ASP.NET Identity ストレージ プロバイダーの実装

作成者 : Raquel Soares De AlmeidaSuhas JoshiTom FitzMacken

ASP.NET Id は、独自のストレージ プロバイダーを作成し、アプリケーションを再作業せずにアプリケーションにプラグインできる拡張可能なシステムです。 このトピックでは、ASP.NET ID 用の MySQL ストレージ プロバイダーを作成する方法について説明します。 カスタム ストレージ プロバイダーの作成の概要については、「 ASP.NET ID のカスタム ストレージ プロバイダーの概要」を参照してください。

このチュートリアルを完了するには、Update 2 でVisual Studio 2013が必要です。

このチュートリアルでは、次の操作を行います。

  • Azure で MySQL データベース インスタンスを作成する方法を示します。
  • MySQL クライアント ツール (MySQL Workbench) を使用してテーブルを作成し、Azure でリモート データベースを管理する方法について説明します。
  • 既定の ASP.NET Identity ストレージ実装を MVC アプリケーション プロジェクトのカスタム実装に置き換える方法について説明します。

このチュートリアルは、もともとRaquel Soares De AlmeidaとRick Anderson( @RickAndMSFT )によって書かれました。 サンプル プロジェクトは、Suhas Joshi によって Identity 2.0 用に更新されました。 トピックは、Tom FitzMacken によって Identity 2.0 用に更新されました。

完成したプロジェクトをダウンロードする

このチュートリアルの最後には、Azure でホストされている MySQL データベースを操作する ASP.NET Identity を含む MVC アプリケーション プロジェクトが用意されています。

完成した MySQL ストレージ プロバイダーは 、AspNet.Identity.MySQL (GitHub) からダウンロードできます。

実行する手順

このチュートリアルでは、次のことについて説明します。

  1. Azure で MySQL データベースを作成する
  2. MySQL で ASP.NET ID テーブルを作成する
  3. MVC アプリケーションを作成し、MySQL プロバイダーを使用するように構成する
  4. アプリを実行する

このトピックでは、ASP.NET ID のアーキテクチャと、顧客ストレージ プロバイダーを実装するときに行う必要がある決定については説明しません。 詳細については、「 ASP.NET ID のカスタム ストレージ プロバイダーの概要」を参照してください。

MySQL ストレージ プロバイダー クラスを確認する

MySQL ストレージ プロバイダーを作成する手順に進む前に、ストレージ プロバイダーを構成するクラスを見てみましょう。 ユーザーとロールを管理するには、アプリケーションから呼び出されるデータベース操作とクラスを管理するクラスが必要です。

ストレージ クラス

データ アクセス層クラス

この例では、データ アクセス層クラスには、テーブルを操作するための SQL ステートメントが含まれています。ただし、コードでは、Entity Framework や NHibernate などのオブジェクト リレーショナル マッピング (ORM) を使用できます。 特に、遅延読み込みとオブジェクト キャッシュを含む ORM がないと、アプリケーションのパフォーマンスが低下する可能性があります。

  • MySQLDatabase - MySQL データベース接続と、データベース操作を実行するためのメソッドが含まれます。 UserStore と RoleStore はどちらも、このクラスのインスタンスでインスタンス化されます。
  • RoleTable - ロール を格納するテーブルのデータベース操作が含まれます。
  • UserClaimsTable - ユーザー要求を格納するテーブルのデータベース操作が含まれます。
  • UserLoginsTable - ユーザー ログイン情報を格納するテーブルのデータベース操作が含まれます。
  • UserRoleTable - どのロールに割り当てられているユーザーを格納するテーブルのデータベース操作が含まれます。
  • UserTable - ユーザー を格納するテーブルのデータベース操作が含まれます。

Azure で MySQL データベース インスタンスを作成する

  1. Azure Portal にログインします。
  2. ページの下部にある [ +新規 ] をクリックし、[ ストア] を選択します。
    Azure Portal ストアにアクセスする方法を示す画像
  3. [選択とアドオン] ウィザードで[ClearDB MySQL Database]\(ClearDB MySQL データベース\) を選択し、ダイアログの右下にある次の矢印をクリックします。
    Clear D B My S Q L Database 広告を表示する画像
  4. 既定の Free プランをそのまま使用し、[ 名前][IdentityMySQLDatabase] に変更します。 最も近いリージョンを選択し、次の矢印をクリックします。
    選択した無料プランと名前の画像
  5. チェック マークをクリックして、データベースの作成を完了します。
    レビュー購入とデータベース作成の画像
  6. データベースが作成されたら、管理ポータルの [アドオン] タブから管理できます。
    [アドオン] タブの画像
  7. データベース接続情報を取得するには、ページの下部にある [接続情報 ] をクリックします。
    接続情報の場所を示す画像
  8. コピー ボタンをクリックして接続文字列をコピーし、後で MVC アプリケーションで使用できるように保存します。
    接続文字列と URL を示す画像

mySQL データベースに ASP.NET ID テーブルを作成する

MySQL データベースに接続して管理するための MySQL Workbench ツールをインストールする

  1. MySQL のダウンロード ページから MySQL Workbench ツールをインストールする
  2. アプリを起動し、 MySQLConnections + ボタンをクリックして新しい接続を追加します。 このチュートリアルで前に作成した Azure MySQL データベースからコピーした接続文字列データを使用します。
  3. 接続を確立したら、新しい [クエリ ] タブを開きます。 MySQLIdentity.sql のコマンドをクエリに貼り付け、データベース テーブルを作成するために実行します。
  4. 次に示すように、Azure でホストされている MySQL データベースに作成されたすべての ASP.NET ID 必要なテーブルが作成されました。
    ID に必要なテーブルを示す画像

テンプレートから MVC アプリケーション プロジェクトを作成し、MySQL プロバイダーを使用するように構成する

必要に応じて、Visual Studio Express 2013 for Web または Update 2 でVisual Studio 2013をインストールします。

ASP.NET をダウンロードします。GitHub の Identity.MySQL プロジェクト

  1. AspNet.Identity.MySQL (GitHub) のリポジトリ URL を参照します。
  2. ソース コードをダウンロードします。
  3. .zip ファイルをローカル フォルダーに抽出します。
  4. AspNet.Identity.MySQL ソリューションを開き、ビルドします。

テンプレートから新しい MVC アプリケーション プロジェクトを作成する

  1. AspNet.Identity.MySQL ソリューションを右クリックし、追加新しいプロジェクト

  2. [ 新しいプロジェクトの追加 ] ダイアログで、左側の [Visual C# ] を選択し、[ Web ] を選択し、[ Web アプリケーション ASP.NET 選択します。 プロジェクトに IdentityMySQLDemo という名前を付けます。[OK] をクリックします。

    [新しいプロジェクトの追加] ダイアログ ウィンドウの画像

  3. [ 新しい ASP.NET プロジェクト ] ダイアログで、既定のオプション (認証方法として 個々のユーザー アカウント を含む) を含む MVC テンプレートを選択し、[OK] をクリック します新しい A S P ドット N E T プロジェクト ダイアログ ウィンドウの画像

  4. ソリューション エクスプローラーで、IdentityMySQLDemo プロジェクトを右クリックし、[NuGet パッケージの管理] を選択します。 検索テキスト ボックス ダイアログで、「 Identity.EntityFramework」と入力します。 結果の一覧でこのパッケージを選択し、[ アンインストール] をクリックします。 依存関係パッケージ EntityFramework をアンインストールするように求められます。 [はい] をクリックします。このアプリケーションではこのパッケージは使用されなくなります。

  5. IdentityMySQLDemo プロジェクトを右クリックし、[ 追加]、[参照]、[ ソリューション]、[プロジェクト ] の順に選択し、AspNet.Identity.MySQL プロジェクトを選択し、[ OK] をクリックします

  6. IdentityMySQLDemo プロジェクトで、すべての参照を に置き換えます。
    using Microsoft.AspNet.Identity.EntityFramework;
    代入
    using AspNet.Identity.MySQL;

  7. IdentityModels.cs で、 ApplicationDbContextMySqlDatabase から派生するように設定し、接続名を持つ 1 つのパラメーターを受け取るコンストラクターを含めます。

    public class ApplicationDbContext : MySQLDatabase
    {
        public ApplicationDbContext(string connectionName)
            : base(connectionName)
        {
        }
    
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext("DefaultConnection");
        }
    }
    
  8. IdentityConfig.cs ファイルを開きます。 ApplicationUserManager.Create メソッドで、インスタンス化する UserManager を次のコードに置き換えます。

    var manager = new ApplicationUserManager(
        new UserStore<ApplicationUser>(
        context.Get<ApplicationDbContext>() as MySQLDatabase));
    
  9. web.config ファイルを開き、DefaultConnection 文字列をこのエントリに置き換えます。強調表示された値は、前の手順で作成した MySQL データベースの接続文字列に置き換えます。

    <add name="DefaultConnection" connectionString="Database=IdentityMySQLDatabase;
    Data Source=<DataSource>;User Id=<UserID>;Password=<Password>"
    providerName="MySql.Data.MySqlClient" />
    

アプリを実行して MySQL DB に接続する

  1. IdentityMySQLDemo プロジェクトを右クリックし、[スタートアップ プロジェクトとして設定] を選択します

  2. Ctrl キーを押しながら F5 キーを押して、アプリをビルドして実行します。

  3. ページの上部にある [ 登録 ] タブをクリックします。

  4. 新しいユーザー名とパスワードを入力し、[ 登録] をクリックします。

    新しいユーザー名とパスワードを示す画像

  5. これで、新しいユーザーが登録され、ログインします。

    新しいユーザーが登録され、ログインされていることを示す図

  6. MySQL Workbench ツールに戻るし、IdentityMySQLDatabase テーブルの内容を調べます。 新しいユーザーを登録するときに、users テーブルでエントリを調べます。

    My S Q L Workbench inspect ツールの画像

次の手順

このアプリで他の認証方法を有効にする方法の詳細については、「 Facebook と Google OAuth2 と OpenID サインオンを使用して ASP.NET MVC 5 アプリを作成する」を参照してください。

DB を OAuth と統合する方法と、ユーザーがアプリへのアクセスを制限するようにロールを設定する方法については、「Membership、OAuth、および SQL Database を使用してセキュリティで保護された ASP.NET MVC 5 アプリを Azure にデプロイする」を参照してください。