實作自訂的 MySQL ASP.NET Identity 儲存體提供者

作者 :Raquel Soares De AlmeidaSuhas JoshiTom FitzMacken

ASP.NET 身分識別是一種可延伸的系統,可讓您建立自己的儲存體提供者,並將它插入您的應用程式,而不需要重新運作應用程式。 本主題描述如何建立適用于 ASP.NET 身分識別的 MySQL 儲存體提供者。 如需建立自訂儲存體提供者的概觀,請參閱 適用于 ASP.NET 身分識別的自訂儲存體提供者概觀

若要完成本教學課程,您必須使用 Update 2 Visual Studio 2013。

本教學課程會:

  • 示範如何在 Azure 上建立 MySQL 資料庫實例。
  • 示範如何使用 MySQL 用戶端工具 (MySQL Workbench) 來建立資料表和管理 Azure 上的遠端資料庫。
  • 示範如何將預設 ASP.NET 身分識別儲存體實作取代為 MVC 應用程式專案的自訂實作。

本教學課程最初是由 Raquel Soares De Almeida 和 Rick Anderson ( @RickAndMSFT ) 所撰寫。 Suhas Joshi 已針對 Identity 2.0 更新範例專案。 Tom FitzMacken 已更新 Identity 2.0 的主題。

下載已完成的專案

在本教學課程結束時,您將會有一個 MVC 應用程式專案,其中 ASP.NET 身分識別使用裝載于 Azure 上的 MySQL 資料庫。

您可以在 AspNet.Identity.MySQL (GitHub) 下載已完成的 MySQL 儲存體提供者。

您將執行的步驟

在本教學課程中,您將:

  1. 在 Azure 上建立 MySQL 資料庫
  2. 在 MySQL 中建立 ASP.NET 身分識別資料表
  3. 建立 MVC 應用程式,並將其設定為使用 MySQL 提供者
  4. 執行應用程式

本主題未涵蓋 ASP.NET 身分識別的架構,以及實作客戶儲存體提供者時必須做出的決策。 如需該資訊,請參閱 適用于 ASP.NET 身分識別的自訂儲存提供者概觀

檢閱 MySQL 儲存體提供者類別

在跳到建立 MySQL 儲存提供者的步驟之前,讓我們看看組成儲存體提供者的類別。 您需要類別來管理從應用程式呼叫的資料庫作業和類別,以管理使用者和角色。

儲存類別

  • IdentityUser - 包含使用者的屬性。
  • UserStore - 包含新增、更新或擷取使用者的作業。
  • IdentityRole - 包含角色的屬性。
  • RoleStore - 包含新增、刪除、更新和擷取角色的作業。

資料存取層類別

在此範例中,資料存取層類別包含使用資料表的 SQL 語句;不過,在您的程式碼中,您可能會想要使用物件關聯式對應 (ORM) ,例如 Entity Framework 或 NHibernate。 特別是,您的應用程式在沒有包含延遲載入和物件快取的 ORM 的情況下,可能會遇到效能不佳的情況。

  • MySQLDatabase - 包含執行資料庫作業的 MySQL 資料庫連線和方法。 UserStore 和 RoleStore 都會以這個類別的實例具現化。
  • RoleTable - 包含儲存角色之資料表的資料庫作業。
  • UserClaimsTable - 包含儲存使用者宣告之資料表的資料庫作業。
  • UserLoginsTable - 包含儲存使用者登入資訊的資料表資料庫作業。
  • UserRoleTable - 包含資料表的資料庫作業,可儲存哪些使用者被指派給哪些角色。
  • UserTable - 包含儲存使用者之資料表的資料庫作業。

在 Azure 上建立 MySQL 資料庫實例

  1. 登入 Azure 入口網站
  2. 按一下頁面底部的 [+新增 ],然後選取 [ 存放區]。
    顯示如何存取 Azure 入口網站存放區的影像
  3. 在 [ 選擇和附加元件 精靈] 中,選取 [ClearDB MySQL 資料庫 ],然後按一下對話方塊右下角的下一個箭號。
    顯示 Clear D B My S Q L Database ad-on 的影像
  4. 保留預設 的免費 方案,並將 [名稱 ] 變更為 IdentityMySQLDatabase。 選取最接近您的區域,然後按一下下一個箭號。
    已選取免費方案並命名的影像
  5. 按一下核取記號以完成資料庫建立。
    檢閱購買和資料庫建立的影像
  6. 建立資料庫之後,您可以從管理入口網站的 [附加元件] 索引標籤加以管理。
    附加元件索引標籤的影像
  7. 您可以按一下頁面底部的 [ 連線資訊 ] 來取得資料庫連接資訊。
    顯示連線資訊位置的影像
  8. 按一下 [複製] 按鈕並儲存連接字串,以便稍後在 MVC 應用程式中使用。
    顯示連接字串和 U R L 的影像

在 MySQL 資料庫中建立 ASP.NET 識別資料表

安裝 MySQL Workbench 工具以連線和管理 MySQL 資料庫

  1. MySQL 下載頁面安裝MySQL Workbench工具
  2. 啟動應用程式,然後按一下 [MySQLConnections +] 按鈕以新增連線。 使用您稍早在本教學課程中建立的 Azure MySQL 資料庫中複製的連接字串資料。
  3. 建立連線之後,請開啟新的 [查詢] 索引卷 標;將 MySQLIdentity.sql 中的命令貼到查詢中,並加以執行,以建立資料庫資料表。
  4. 您現在已擁有在 Azure 上裝載之 MySQL 資料庫上建立的所有 ASP.NET 身分識別必要資料表,如下所示。
    顯示身分識別必要資料表的影像

從範本建立 MVC 應用程式專案,並將其設定為使用 MySQL 提供者

如有需要,請使用Update 2 安裝 Visual Studio Express 2013 for WebVisual Studio 2013

下載 ASP.NET。來自 GitHub 的 Identity.MySQL 專案

  1. 流覽至 AspNet.Identity.MySQL 上的存放庫 URL (GitHub)
  2. 下載原始程式碼。
  3. 將.zip檔案解壓縮到本機資料夾。
  4. 開啟 AspNet.Identity.MySQL 解決方案並加以建置。

從範本建立新的 MVC 應用程式專案

  1. 以滑鼠右鍵按一下AspNet.Identity.MySQL解決方案,然後新增專案

  2. 在左側的 [ 新增專案 ] 對話方塊中,選取 [ Visual C# ],然後選取 [ Web ],然後選取 [ASP.NET Web 應用程式]。 為您的專案命名 IdentityMySQLDemo;然後按一下 [確定]。

    [新增專案] 對話方塊視窗的影像

  3. 在 [ 新增 ASP.NET 專案 ] 對話方塊中,選取具有預設選項的 MVC 範本 (,其中包含 [個別使用者帳戶 ] 作為驗證方法) ,然後按一下 [ 確定]。新 A S 點 N E T 專案對話方塊視窗的影像

  4. 在 方案總管中,以滑鼠右鍵按一下您的 IdentityMySQLDemo 專案,然後選取 [管理 NuGet 套件]。 在搜尋文字方塊中,輸入 Identity.EntityFramework。 在結果清單中選取此套件,然後按一下 [ 卸載]。 系統會提示您卸載相依性套件 EntityFramework。 按一下 [是],因為我們不再在此應用程式上使用此套件。

  5. 以滑鼠右鍵按一下 IdentityMySQLDemo 專案,選取 [ 新增]、[ 參考]、[方案]、[專案]; 選取 [AspNet.Identity.MySQL] 專案,然後按一下 [ 確定]。

  6. 在 IdentityMySQLDemo 專案中,取代 對 的所有參考
    using Microsoft.AspNet.Identity.EntityFramework;
    取代為
    using AspNet.Identity.MySQL;

  7. 在 IdentityModels.cs 中,將 ApplicationDbCoNtext 設定為衍生自 MySqlDatabase ,並包含採用具有連接名稱之單一參數的建構函式。

    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資料表的內容。 當您註冊新使用者時,請檢查使用者資料表中的專案。

    我的 S Q L Workbench 檢查工具影像

後續步驟

如需如何在此應用程式上啟用其他驗證方法的詳細資訊,請參閱 使用 Facebook 和 Google OAuth2 和 OpenID 登入建立 ASP.NET MVC 5 應用程式

若要瞭解如何將 DB 與 OAuth 整合,以及設定角色來限制使用者存取您的應用程式,請參閱使用成員資格、OAuth 和SQL Database將安全 ASP.NET MVC 5 應用程式部署至 Azure