Pengantar identitas ASP.NET

Sistem keanggotaan ASP.NET diperkenalkan dengan ASP.NET 2.0 pada tahun 2005, dan sejak itu ada banyak perubahan dalam cara aplikasi web biasanya menangani autentikasi dan otorisasi. ASP.NET Identity adalah tampilan baru tentang sistem keanggotaan ketika Anda membangun aplikasi modern untuk web, ponsel, atau tablet.

Latar Belakang: Keanggotaan di ASP.NET

Keanggotaan ASP.NET

ASP.NET Keanggotaan dirancang untuk menyelesaikan persyaratan keanggotaan situs yang umum pada tahun 2005, yang melibatkan Autentikasi Formulir, dan database SQL Server untuk nama pengguna, kata sandi, dan data profil. Saat ini ada berbagai opsi penyimpanan data yang jauh lebih luas untuk aplikasi web, dan sebagian besar pengembang ingin memungkinkan situs mereka menggunakan penyedia identitas sosial untuk fungsionalitas autentikasi dan otorisasi. Keterbatasan desain Keanggotaan ASP.NET membuat transisi ini sulit:

  • Skema database dirancang untuk SQL Server dan Anda tidak dapat mengubahnya. Anda dapat menambahkan informasi profil, tetapi data tambahan dikemas ke dalam tabel yang berbeda, yang membuatnya sulit untuk diakses dengan cara apa pun kecuali melalui API Penyedia Profil.
  • Sistem penyedia memungkinkan Anda untuk mengubah penyimpanan data cadangan, tetapi sistem dirancang di sekitar asumsi yang sesuai untuk database relasional. Anda dapat menulis penyedia untuk menyimpan informasi keanggotaan dalam mekanisme penyimpanan non-relasional, seperti Tabel Azure Storage, tetapi kemudian Anda harus mengerjakan desain relasional dengan menulis banyak kode dan banyak System.NotImplementedException pengecualian untuk metode yang tidak berlaku untuk database NoSQL.
  • Karena fungsionalitas masuk/keluar didasarkan pada Autentikasi Formulir, sistem keanggotaan tidak dapat menggunakan OWIN. OWIN menyertakan komponen middleware untuk autentikasi, termasuk dukungan untuk masuk menggunakan penyedia identitas eksternal (seperti Akun Microsoft, Facebook, Google, Twitter), dan masuk menggunakan akun organisasi dari Active Directory lokal atau Azure Active Directory. OWIN juga menyertakan dukungan untuk OAuth 2.0, JWT, dan CORS.

Keanggotaan Sederhana ASP.NET

ASP.NET keanggotaan sederhana dikembangkan sebagai sistem keanggotaan untuk Halaman Web ASP.NET. Ini dirilis dengan WebMatrix dan Visual Studio 2010 SP1. Tujuan Dari Keanggotaan Sederhana adalah untuk memudahkan untuk menambahkan fungsionalitas keanggotaan ke aplikasi Halaman Web.

Keanggotaan Sederhana memang memudahkan untuk menyesuaikan informasi profil pengguna, tetapi masih berbagi masalah lain dengan Keanggotaan ASP.NET, dan memiliki beberapa batasan:

  • Sulit untuk mempertahankan data sistem keanggotaan di penyimpanan non-relasional.
  • Anda tidak dapat menggunakannya dengan OWIN.
  • Ini tidak berfungsi dengan baik dengan penyedia Keanggotaan ASP.NET yang ada, dan tidak dapat diperluas.

Penyedia Universal ASP.NET

ASP.NET Penyedia Universal dikembangkan untuk memungkinkan untuk mempertahankan informasi keanggotaan di Microsoft Azure SQL Database, dan mereka juga bekerja dengan SQL Server Compact. Penyedia Universal dibangun di atas Kode Kerangka Kerja Entitas Terlebih Dahulu, yang berarti bahwa Penyedia Universal dapat digunakan untuk mempertahankan data di penyimpanan apa pun yang didukung oleh EF. Dengan Penyedia Universal, skema database juga dibersihkan cukup banyak.

Penyedia Universal dibangun di atas infrastruktur Keanggotaan ASP.NET, sehingga mereka masih memiliki batasan yang sama dengan Penyedia SqlMembership. Artinya, mereka dirancang untuk database relasional dan sulit untuk menyesuaikan profil dan informasi pengguna. Penyedia ini juga masih menggunakan Autentikasi Formulir untuk fungsionalitas masuk dan keluar.

Identitas ASP.NET

Ketika kisah keanggotaan di ASP.NET telah berkembang selama bertahun-tahun, tim ASP.NET telah belajar banyak dari umpan balik dari pelanggan.

Asumsi bahwa pengguna akan masuk dengan memasukkan nama pengguna dan kata sandi yang telah mereka daftarkan di aplikasi Anda sendiri tidak lagi valid. Web telah menjadi lebih sosial. Pengguna berinteraksi satu sama lain secara real time melalui saluran sosial seperti Facebook, Twitter, dan situs web sosial lainnya. Pengembang ingin pengguna dapat masuk dengan identitas sosial mereka sehingga mereka dapat memiliki pengalaman yang kaya di situs web mereka. Sistem keanggotaan modern harus mengaktifkan masuk berbasis pengalihan ke penyedia autentikasi seperti Facebook, Twitter, dan lainnya.

Seiring berkembangnya pengembangan web, begitu juga pola pengembangan web. Pengujian unit kode aplikasi menjadi perhatian inti bagi pengembang aplikasi. Pada tahun 2008 ASP.NET menambahkan kerangka kerja baru berdasarkan pola Model-View-Controller (MVC), sebagian untuk membantu pengembang membangun unit yang dapat diuji ASP.NET aplikasi. Pengembang yang ingin unit menguji logika aplikasi mereka juga ingin dapat melakukannya dengan sistem keanggotaan.

Mempertimbangkan perubahan ini dalam pengembangan aplikasi web, ASP.NET Identity dikembangkan dengan tujuan berikut:

  • Satu sistem identitas ASP.NET

    • ASP.NET Identity dapat digunakan dengan semua kerangka kerja ASP.NET, seperti ASP.NET MVC, Web Forms, Web Pages, Web API, dan SignalR.
    • ASP.NET Identity dapat digunakan saat Anda membangun aplikasi web, telepon, toko, atau hibrid.
  • Kemudahan mencolokkan data profil tentang pengguna

    • Anda memiliki kontrol atas skema informasi pengguna dan profil. Misalnya, Anda dapat dengan mudah mengaktifkan sistem untuk menyimpan tanggal lahir yang dimasukkan oleh pengguna saat mereka mendaftarkan akun di aplikasi Anda.
  • Kontrol persistensi

    • Secara default, sistem identitas ASP.NET menyimpan semua informasi pengguna dalam database. ASP.NET Identity menggunakan Kode Kerangka Kerja Entitas Terlebih Dahulu untuk mengimplementasikan semua mekanisme persistensinya.
    • Karena Anda mengontrol skema database, tugas umum seperti mengubah nama tabel atau mengubah jenis data kunci primer mudah dilakukan.
    • Sangat mudah untuk mencolokkan mekanisme penyimpanan yang berbeda seperti SharePoint, Azure Storage Table Service, database NoSQL, dll., tanpa harus melemparkan System.NotImplementedExceptions pengecualian.
  • Uji unit

    • ASP.NET Identity membuat aplikasi web lebih banyak unit dapat diuji. Anda dapat menulis pengujian unit untuk bagian aplikasi Anda yang menggunakan ASP.NET Identity.
  • Penyedia peran

    • Ada penyedia peran yang memungkinkan Anda membatasi akses ke bagian aplikasi Anda berdasarkan peran. Anda dapat dengan mudah membuat peran seperti "Admin" dan menambahkan pengguna ke peran.
  • Berbasis Klaim

    • ASP.NET Identity mendukung autentikasi berbasis klaim, di mana identitas pengguna diwakili sebagai serangkaian klaim. Klaim memungkinkan pengembang untuk jauh lebih ekspresif dalam menjelaskan identitas pengguna daripada peran yang diizinkan. Sedangkan keanggotaan peran hanya boolean (anggota atau non-anggota), klaim dapat mencakup informasi kaya tentang identitas dan keanggotaan pengguna.
  • Penyedia Login Sosial

    • Anda dapat dengan mudah menambahkan rincian masuk sosial seperti Akun Microsoft, Facebook, Twitter, Google, dan lainnya ke aplikasi Anda, dan menyimpan data khusus pengguna di aplikasi Anda.
  • Integrasi OWIN

    • ASP.NET autentikasi sekarang didasarkan pada middleware OWIN yang dapat digunakan pada host berbasis OWIN apa pun. ASP.NET Identity tidak memiliki dependensi apa pun pada System.Web. Ini adalah kerangka kerja OWIN yang sepenuhnya sesuai dan dapat digunakan dalam aplikasi yang dihosting OWIN.
    • ASP.NET Identity menggunakan Autentikasi OWIN untuk masuk/keluar dari pengguna di situs web. Ini berarti bahwa alih-alih menggunakan FormsAuthentication untuk menghasilkan cookie, aplikasi menggunakan OWIN CookieAuthentication untuk melakukannya.
  • Paket NuGet

    • ASP.NET Identity didistribusikan ulang sebagai paket NuGet yang diinstal dalam templat MVC, Web Forms, dan Web API ASP.NET yang dikirim dengan Visual Studio 2017. Anda dapat mengunduh paket NuGet ini dari galeri NuGet.
    • Merilis ASP.NET Identity sebagai paket NuGet memudahkan tim ASP.NET untuk melakukan iterasi pada fitur baru dan perbaikan bug, dan mengirimkannya kepada pengembang dengan cara yang gesar.

Mulai menggunakan identitas ASP.NET

ASP.NET Identity digunakan dalam templat proyek Visual Studio 2017 untuk ASP.NET MVC, Web Forms, Web API, dan SPA. Dalam panduan ini, kami akan mengilustrasikan bagaimana templat proyek menggunakan ASP.NET Identity untuk menambahkan fungsionalitas untuk mendaftar, masuk, dan mengeluarkan pengguna.

ASP.NET Identity diimplementasikan menggunakan prosedur berikut. Tujuan artikel ini adalah untuk memberi Anda gambaran tingkat tinggi tentang identitas ASP.NET; Anda dapat mengikutinya langkah demi langkah atau cukup membaca detailnya. Untuk instruksi lebih rinci tentang membuat aplikasi menggunakan ASP.NET Identity, termasuk menggunakan API baru untuk menambahkan pengguna, peran, dan informasi profil, lihat bagian Langkah Berikutnya di akhir artikel ini.

  1. Buat aplikasi MVC ASP.NET dengan Akun Individual. Anda dapat menggunakan identitas ASP.NET di ASP.NET MVC, Formulir Web, API Web, SignalR, dll. Dalam artikel ini kita akan mulai dengan aplikasi MVC ASP.NET.

    Gambar jendela proyek ASP dot Net baru

  2. Proyek yang dibuat berisi tiga paket berikut untuk identitas ASP.NET.

    • Microsoft.AspNet.Identity.EntityFramework
      Paket ini memiliki implementasi Entity Framework ASP.NET Identity yang akan mempertahankan data dan skema Identitas ASP.NET untuk SQL Server.
    • Microsoft.AspNet.Identity.Core
      Paket ini memiliki antarmuka inti untuk ASP.NET Identity. Paket ini dapat digunakan untuk menulis implementasi untuk identitas ASP.NET yang menargetkan penyimpanan persistensi yang berbeda seperti Azure Table Storage, database NoSQL, dll.
    • Microsoft.AspNet.Identity.OWIN
      Paket ini berisi fungsionalitas yang digunakan untuk menyambungkan autentikasi OWIN dengan identitas ASP.NET di aplikasi ASP.NET. Ini digunakan saat Anda menambahkan fungsionalitas masuk ke aplikasi Anda dan memanggil middleware OWIN Cookie Authentication untuk menghasilkan cookie.
  3. Membuat pengguna.
    Luncurkan aplikasi lalu klik tautan Daftar untuk membuat pengguna. Gambar berikut menunjukkan halaman Daftar yang mengumpulkan nama pengguna dan kata sandi.

    Gambar buat akun baru

    Saat pengguna memilih tombol Daftar , Register tindakan pengontrol Akun membuat pengguna dengan memanggil ASP.NET Identity API, seperti yang disorot di bawah ini:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser() { UserName = model.UserName };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                await SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                AddErrors(result);
            }
        }
    
        // If we got this far, something failed, redisplay form
        return View(model);
    }
    
  4. Masuk.
    Jika pengguna berhasil dibuat, dia masuk dengan metode .SignInAsync

     [HttpPost]
     [AllowAnonymous]
     [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                 await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
                        
                 // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
                 // Send an email with this link
                 // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                 // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                 // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
    
                 return RedirectToAction("Index", "Home");
             }
             AddErrors(result);
         }
    
        // If we got this far, something failed, redisplay form
         return View(model);
     }
    

    Metode ini SignInManager.SignInAsync menghasilkan ClaimsIdentity. Karena ASP.NET Identity dan Otentikasi Cookie OWIN adalah sistem berbasis klaim, kerangka kerja mengharuskan aplikasi untuk menghasilkan ClaimsIdentity bagi pengguna. ClaimsIdentity memiliki informasi tentang semua klaim untuk pengguna, seperti peran apa yang dimiliki pengguna.

  5. Log-keluar.
    Pilih tautan Keluar untuk memanggil tindakan LogOff di pengontrol akun.

    // POST: /Account/LogOff
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        AuthenticationManager.SignOut();
        return RedirectToAction("Index", "Home");
    }
    

    Kode yang disorot di atas menunjukkan metode OWIN AuthenticationManager.SignOut . Ini dianalogikan dengan metode FormsAuthentication.SignOut yang digunakan oleh modul FormsAuthentication di Formulir Web.

Komponen Identitas ASP.NET

Diagram di bawah ini menunjukkan komponen sistem identitas ASP.NET (pilih ini atau pada diagram untuk memperbesarnya). Paket berwarna hijau membentuk sistem identitas ASP.NET. Semua paket lainnya adalah dependensi yang diperlukan untuk menggunakan sistem identitas ASP.NET dalam aplikasi ASP.NET.

Diagram memperlihatkan komponen sistem identitas A S P dot Net

Berikut ini adalah deskripsi singkat tentang paket NuGet yang tidak disebutkan sebelumnya:

  • Microsoft.Owin.Security.Cookies
    Middleware yang memungkinkan aplikasi menggunakan autentikasi berbasis cookie, mirip dengan ASP. Autentikasi Formulir NET.
  • EntityFramework
    Entity Framework adalah teknologi akses data microsoft yang direkomendasikan untuk database relasional.

Migrasi dari Keanggotaan ke identitas ASP.NET

Kami berharap dapat segera memberikan panduan tentang migrasi aplikasi Anda yang ada yang menggunakan Keanggotaan ASP.NET atau Keanggotaan Sederhana ke sistem identitas ASP.NET baru.

Langkah berikutnya