次の方法で共有


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

作成者: Raquel Soares De AlmeidaSuhas JoshiTom FitzMacken

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

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

このチュートリアルの内容は次のとおりです。

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

このチュートリアルはもともと 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 Identity テーブルを作成する
  3. MVC アプリケーションを作成し、MySQL プロバイダーを使用するように構成する
  4. アプリを実行する

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

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

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

ストレージ クラス

  • IdentityUser - ユーザーのプロパティが含まれています。
  • UserStore - ユーザーを追加、更新、または取得するための操作が含まれています。
  • IdentityRole - ロールのプロパティが含まれています。
  • RoleStore - ロールを追加、削除、更新、取得するための操作が含まれています。

データ アクセス レイヤー クラス

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

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

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

  1. Azure Portal にログインします。
  2. ページの下部にある [+新規] を選択し、[ストア] を選択します。
    Image showing how to access the Azure Portal store
  3. [アドオンの選択] ウィザードで、ClearDB MySQL データベースを選択し、ダイアログの右下にある次へ進む矢印を選択します。
    Image displaying the Clear D B My S Q L Database ad-on
  4. 既定の Free プランをそのまま使用し、[名前]IdentityMySQLDatabase に変更します。 最も近いリージョンを選択し、次へ進む矢印を選択します。
    Image of the free plan selected and name
  5. データベースの作成を完了するにはチェックマークを選択します。
    Image of review purchase and database creation
  6. データベースが作成されたら、管理ポータルの [アドオン] タブから管理できます。
    Image of add-ons tab
  7. ページの下部にある [接続情報] を選択して、データベース接続情報を取得できます。
    Image showing the connection info location
  8. コピー ボタンを選択して接続文字列をコピーし、後で MVC アプリケーションで使用できるように保存します。
    Image showing connection string and U R L

MySQL データベース内で ASP.NET Identity テーブルを作成する

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

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

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

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

ASP.NET.Identity.MySQL プロジェクトを GitHub からダウンロードする

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

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

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

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

    Image of the add new project dialog window

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

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

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

  6. IdentityMySQLDemo プロジェクトで、
    using Microsoft.AspNet.Identity.EntityFramework;
    with
    using AspNet.Identity.MySQL;

  7. IdentityModels.cs で、MySqlDatabase から派生するように ApplicationDbContext を設定し、接続名を含む 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. 新しいユーザー名とパスワードを入力し、[登録] を選択します。

    Image showing new user name and password

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

    Illustration showing the new user is registered and logged in

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

    Image of My S Q L Workbench inspect tool

次のステップ

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

DB と OAuth を統合し、ユーザーのアプリへのアクセスを制限するようにロールを設定する方法については、メンバーシップ、OAuth、SQL データベースを使用した安全な ASP.NET MVC 5 アプリの Azure へのデプロイに関するページを参照してください。