Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Tom FitzMacken
ASP.NET Identity adalah sistem yang dapat diperluas yang memungkinkan Anda membuat penyedia penyimpanan Anda sendiri dan menyambungkannya ke aplikasi Anda tanpa menggunakan kembali aplikasi. Topik ini menjelaskan cara membuat penyedia penyimpanan yang disesuaikan untuk identitas ASP.NET. Ini mencakup konsep penting untuk membuat penyedia penyimpanan Anda sendiri, tetapi bukan panduan langkah demi langkah untuk menerapkan penyedia penyimpanan kustom.
Untuk contoh penerapan penyedia penyimpanan kustom, lihat Menerapkan Penyedia Penyimpanan Identitas ASP.NET MySQL Kustom.
Topik ini diperbarui untuk ASP.NET Identity 2.0.
Versi perangkat lunak yang digunakan dalam tutorial
- Visual Studio 2013 dengan Pembaruan 2
- identitas ASP.NET 2
Pengantar
Secara default, sistem identitas ASP.NET menyimpan informasi pengguna dalam database SQL Server, dan menggunakan Kode Kerangka Kerja Entitas Terlebih Dahulu untuk membuat database. Untuk banyak aplikasi, pendekatan ini bekerja dengan baik. Namun, Anda mungkin lebih suka menggunakan jenis mekanisme persistensi yang berbeda, seperti Azure Table Storage, atau Anda mungkin sudah memiliki tabel database dengan struktur yang sangat berbeda dari implementasi default. Dalam kedua kasus, Anda dapat menulis penyedia yang disesuaikan untuk mekanisme penyimpanan Anda dan menyambungkan penyedia tersebut ke aplikasi Anda.
ASP.NET Identity disertakan secara default di banyak templat Visual Studio 2013. Anda bisa mendapatkan pembaruan untuk ASP.NET Identity melalui paket Microsoft AspNet Identity EntityFramework NuGet.
Topik ini mencakup bagian berikut:
- Memahami arsitektur
- Memahami data yang disimpan
- Membuat lapisan akses data
- Mengkustomisasi kelas pengguna
- Mengkustomisasi penyimpanan pengguna
- Menyesuaikan kelas peran
- Menyesuaikan penyimpanan peran
- Mengonfigurasi ulang aplikasi untuk menggunakan penyedia penyimpanan baru
- Implementasi lain dari penyedia penyimpanan kustom
Memahami arsitektur
ASP.NET Identity terdiri dari kelas yang disebut manajer dan toko. Manajer adalah kelas tingkat tinggi yang digunakan pengembang aplikasi untuk melakukan operasi, seperti membuat pengguna, dalam sistem identitas ASP.NET. Toko adalah kelas tingkat bawah yang menentukan bagaimana entitas, seperti pengguna dan peran, dipertahankan. Toko digabungkan erat dengan mekanisme persistensi, tetapi manajer diputar dari toko yang berarti Anda dapat mengganti mekanisme persistensi tanpa mengganggu seluruh aplikasi.
Diagram berikut menunjukkan bagaimana aplikasi web Anda berinteraksi dengan manajer, dan penyimpanan berinteraksi dengan lapisan akses data.
Untuk membuat penyedia penyimpanan yang disesuaikan untuk identitas ASP.NET, Anda harus membuat sumber data, lapisan akses data, dan kelas penyimpanan yang berinteraksi dengan lapisan akses data ini. Anda dapat terus menggunakan API manajer yang sama untuk melakukan operasi data pada pengguna tetapi sekarang data disimpan ke sistem penyimpanan yang berbeda.
Anda tidak perlu menyesuaikan kelas manajer karena saat membuat instans baru UserManager atau RoleManager, Anda menyediakan jenis kelas pengguna dan meneruskan instans kelas toko sebagai argumen. Pendekatan ini memungkinkan Anda untuk menyambungkan kelas yang disesuaikan ke dalam struktur yang ada. Anda akan melihat cara membuat instans UserManager dan RoleManager dengan kelas penyimpanan yang disesuaikan di bagian Mengonfigurasi ulang aplikasi untuk menggunakan penyedia penyimpanan baru.
Memahami data yang disimpan
Untuk menerapkan penyedia penyimpanan kustom, Anda harus memahami jenis data yang digunakan dengan ASP.NET Identity, dan memutuskan fitur mana yang relevan dengan aplikasi Anda.
Data | Deskripsi |
---|---|
Pengguna | Pengguna terdaftar situs web Anda. Menyertakan Id pengguna dan nama pengguna. Mungkin menyertakan kata sandi yang di-hash jika pengguna masuk dengan kredensial yang khusus untuk situs Anda (daripada menggunakan kredensial dari situs eksternal seperti Facebook), dan stempel keamanan untuk menunjukkan apakah ada yang berubah dalam kredensial pengguna. Mungkin juga menyertakan alamat email, nomor telepon, apakah autentikasi dua faktor diaktifkan, jumlah login yang gagal saat ini, dan apakah akun telah dikunci. |
Klaim Pengguna | Sekumpulan pernyataan (atau klaim) tentang pengguna yang mewakili identitas pengguna. Dapat mengaktifkan ekspresi identitas pengguna yang lebih besar daripada yang dapat dicapai melalui peran. |
Login Pengguna | Informasi tentang penyedia autentikasi eksternal (seperti Facebook) untuk digunakan saat masuk ke pengguna. |
Peran | Grup otorisasi untuk situs Anda. Termasuk Id peran dan nama peran (seperti "Admin" atau "Karyawan"). |
Membuat lapisan akses data
Topik ini mengasumsikan Anda terbiasa dengan mekanisme persistensi yang akan Anda gunakan dan cara membuat entitas untuk mekanisme tersebut. Topik ini tidak memberikan detail tentang cara membuat repositori atau kelas akses data; sebaliknya, ini memberikan beberapa saran tentang keputusan desain yang perlu Anda buat saat bekerja dengan identitas ASP.NET.
Anda memiliki banyak kebebasan saat merancang repositori untuk penyedia toko yang disesuaikan. Anda hanya perlu membuat repositori untuk fitur yang ingin Anda gunakan dalam aplikasi Anda. Misalnya, jika Anda tidak menggunakan peran dalam aplikasi, Anda tidak perlu membuat penyimpanan untuk peran atau peran pengguna. Teknologi Anda dan infrastruktur yang ada mungkin memerlukan struktur yang sangat berbeda dari implementasi default ASP.NET Identity. Di lapisan akses data, Anda menyediakan logika untuk bekerja dengan struktur repositori Anda.
Untuk implementasi MySQL repositori data untuk ASP.NET Identity 2.0, lihat MySQLIdentity.sql.
Di lapisan akses data, Anda menyediakan logika untuk menyimpan data dari identitas ASP.NET ke sumber data Anda. Lapisan akses data untuk penyedia penyimpanan yang disesuaikan mungkin menyertakan kelas berikut untuk menyimpan informasi pengguna dan peran.
Kelas | Deskripsi | Contoh |
---|---|---|
Konteks | Merangkum informasi untuk menyambungkan ke mekanisme persistensi Anda dan menjalankan kueri. Kelas ini terpusat pada lapisan akses data Anda. Kelas data lainnya akan memerlukan instans kelas ini untuk melakukan operasi mereka. Anda juga akan menginisialisasi kelas toko Anda dengan instans kelas ini. | MySQLDatabase |
Penyimpanan Pengguna | Menyimpan dan mengambil informasi pengguna (seperti nama pengguna dan hash kata sandi). | UserTable (MySQL) |
Penyimpanan Peran | Menyimpan dan mengambil informasi peran (seperti nama peran). | RoleTable (MySQL) |
Penyimpanan UserClaims | Menyimpan dan mengambil informasi klaim pengguna (seperti jenis dan nilai klaim). | UserClaimsTable (MySQL) |
Penyimpanan UserLogins | Menyimpan dan mengambil informasi masuk pengguna (seperti penyedia autentikasi eksternal). | UserLoginsTable (MySQL) |
Penyimpanan UserRole | Menyimpan dan mengambil peran mana yang ditetapkan pengguna. | UserRoleTable (MySQL) |
Sekali lagi, Anda hanya perlu mengimplementasikan kelas yang ingin Anda gunakan dalam aplikasi Anda.
Di kelas akses data, Anda menyediakan kode untuk melakukan operasi data untuk mekanisme persistensi tertentu Anda. Misalnya, dalam implementasi MySQL, kelas UserTable berisi metode untuk menyisipkan rekaman baru ke dalam tabel database Pengguna. Variabel bernama _database
adalah instans kelas MySQLDatabase.
public int Insert(TUser user)
{
string commandText = @"Insert into Users (UserName, Id, PasswordHash, SecurityStamp,Email,EmailConfirmed,PhoneNumber,PhoneNumberConfirmed, AccessFailedCount,LockoutEnabled,LockoutEndDateUtc,TwoFactorEnabled)
values (@name, @id, @pwdHash, @SecStamp,@email,@emailconfirmed,@phonenumber,@phonenumberconfirmed,@accesscount,@lockoutenabled,@lockoutenddate,@twofactorenabled)";
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("@name", user.UserName);
parameters.Add("@id", user.Id);
parameters.Add("@pwdHash", user.PasswordHash);
parameters.Add("@SecStamp", user.SecurityStamp);
parameters.Add("@email", user.Email);
parameters.Add("@emailconfirmed", user.EmailConfirmed);
parameters.Add("@phonenumber", user.PhoneNumber);
parameters.Add("@phonenumberconfirmed", user.PhoneNumberConfirmed);
parameters.Add("@accesscount", user.AccessFailedCount);
parameters.Add("@lockoutenabled", user.LockoutEnabled);
parameters.Add("@lockoutenddate", user.LockoutEndDateUtc);
parameters.Add("@twofactorenabled", user.TwoFactorEnabled);
return _database.Execute(commandText, parameters);
}
Setelah membuat kelas akses data, Anda harus membuat kelas penyimpanan yang memanggil metode tertentu di lapisan akses data.
Mengkustomisasi kelas pengguna
Saat menerapkan penyedia penyimpanan Anda sendiri, Anda harus membuat kelas pengguna yang setara dengan kelas IdentityUser di namespace Microsoft.ASP.NET.Identity.EntityFramework :
Diagram berikut menunjukkan kelas IdentityUser yang harus Anda buat dan antarmuka untuk diterapkan di kelas ini.
Antarmuka IUser<TKey> menentukan properti yang coba dipanggil UserManager saat melakukan operasi yang diminta. Antarmuka berisi dua properti - Id dan UserName. Antarmuka IUser<TKey> memungkinkan Anda menentukan jenis kunci untuk pengguna melalui parameter TKey generik. Jenis properti Id cocok dengan nilai parameter TKey.
Kerangka kerja Identitas juga menyediakan antarmuka IUser (tanpa parameter generik) saat Anda ingin menggunakan nilai string untuk kunci.
Kelas IdentityUser mengimplementasikan IUser dan berisi properti atau konstruktor tambahan untuk pengguna di situs web Anda. Contoh berikut menunjukkan kelas IdentityUser yang menggunakan bilangan bulat untuk kunci. Bidang Id diatur ke int agar sesuai dengan nilai parameter generik.
public class IdentityUser : IUser<int>
{
public IdentityUser() { ... }
public IdentityUser(string userName) { ... }
public int Id { get; set; }
public string UserName { get; set; }
// can also define optional properties such as:
// PasswordHash
// SecurityStamp
// Claims
// Logins
// Roles
}
Untuk implementasi lengkap, lihat IdentityUser (MySQL).
Mengkustomisasi penyimpanan pengguna
Anda juga membuat kelas UserStore yang menyediakan metode untuk semua operasi data pada pengguna. Kelas ini setara dengan kelas UserStore<TUser> di namespace Microsoft.ASP.NET.Identity.EntityFramework . Di kelas UserStore, Anda mengimplementasikan IUserStore<TUser, TKey>, dan antarmuka opsional apa pun. Anda memilih antarmuka opsional mana yang akan diterapkan berdasarkan fungsionalitas yang ingin Anda sediakan dalam aplikasi Anda.
Gambar berikut menunjukkan kelas UserStore yang harus Anda buat dan antarmuka yang relevan.
Templat proyek default di Visual Studio berisi kode yang mengasumsikan banyak antarmuka opsional telah diterapkan di penyimpanan pengguna. Jika Anda menggunakan templat default dengan penyimpanan pengguna yang disesuaikan, Anda harus menerapkan antarmuka opsional di penyimpanan pengguna Anda atau mengubah kode templat untuk tidak lagi memanggil metode di antarmuka yang belum Anda terapkan.
Contoh berikut menunjukkan kelas penyimpanan pengguna sederhana. Parameter generik TUser mengambil jenis kelas pengguna Anda yang biasanya merupakan kelas IdentityUser yang Anda tentukan. Parameter generik TKey mengambil jenis kunci pengguna Anda.
public class UserStore : IUserStore<IdentityUser, int>
{
public UserStore() { ... }
public UserStore(ExampleStorage database) { ... }
public Task CreateAsync(IdentityUser user) { ... }
public Task DeleteAsync(IdentityUser user) { ... }
public Task<IdentityUser> FindByIdAsync(int userId) { ... }
public Task<IdentityUser> FindByNameAsync(string userName) { ... }
public Task UpdateAsync(IdentityUser user) { ... }
public void Dispose() { ... }
}
Dalam contoh ini, konstruktor yang mengambil parameter bernama database jenis ExampleDatabase hanyalah ilustrasi tentang cara meneruskan kelas akses data Anda. Misalnya, dalam implementasi MySQL, konstruktor ini mengambil parameter jenis MySQLDatabase.
Dalam kelas UserStore, Anda menggunakan kelas akses data yang Anda buat untuk melakukan operasi. Misalnya, dalam implementasi MySQL, kelas UserStore memiliki metode CreateAsync yang menggunakan instans UserTable untuk menyisipkan rekaman baru. Metode Sisipkan pada objek userTable adalah metode yang sama yang diperlihatkan di bagian sebelumnya.
public Task CreateAsync(IdentityUser user)
{
if (user == null) {
throw new ArgumentNullException("user");
}
userTable.Insert(user);
return Task.FromResult<object>(null);
}
Antarmuka yang akan diterapkan saat menyesuaikan penyimpanan pengguna
Gambar berikutnya menunjukkan detail selengkapnya tentang fungsionalitas yang ditentukan di setiap antarmuka. Semua antarmuka opsional mewarisi dari IUserStore.
IUserStore
Antarmuka TUser TUser, TKey> IUserStore< adalah satu-satunya antarmuka yang harus Anda terapkan di penyimpanan pengguna Anda. Ini mendefinisikan metode untuk membuat, memperbarui, menghapus, dan mengambil pengguna.IUserClaimStore
Antarmuka IUserClaimStore<TUser, TKey> menentukan metode yang harus Anda terapkan di penyimpanan pengguna Anda untuk mengaktifkan klaim pengguna. Ini berisi metode atau menambahkan, menghapus, dan mengambil klaim pengguna.IUserLoginStore
IUserLoginStore<TUser, TKey> menentukan metode yang harus Anda terapkan di penyimpanan pengguna Anda untuk mengaktifkan penyedia autentikasi eksternal. Ini berisi metode untuk menambahkan, menghapus, dan mengambil login pengguna, dan metode untuk mengambil pengguna berdasarkan informasi masuk.IUserRoleStore
Antarmuka IUserRoleStore<TKey, TUser> menentukan metode yang harus Anda terapkan di penyimpanan pengguna Anda untuk memetakan pengguna ke peran. Ini berisi metode untuk menambahkan, menghapus, dan mengambil peran pengguna, dan metode untuk memeriksa apakah pengguna ditetapkan ke peran.IUserPasswordStore
Antarmuka IUserPasswordStore<TUser, TKey> menentukan metode yang harus Anda terapkan di penyimpanan pengguna Anda untuk mempertahankan kata sandi yang di-hash. Ini berisi metode untuk mendapatkan dan mengatur kata sandi yang di-hash, dan metode yang menunjukkan apakah pengguna telah mengatur kata sandi.IUserSecurityStampStore
Antarmuka TUserSecurityStampStore<TUser, TKey> menentukan metode yang harus Anda terapkan di penyimpanan pengguna Anda untuk menggunakan stempel keamanan untuk menunjukkan apakah informasi akun pengguna telah berubah. Stempel ini diperbarui ketika pengguna mengubah kata sandi, atau menambahkan atau menghapus login. Ini berisi metode untuk mendapatkan dan mengatur stempel keamanan.IUserTwoFactorStore
Antarmuka TUserTwoFactorStore<TUser, TKey> menentukan metode yang harus Anda terapkan untuk menerapkan autentikasi dua faktor. Ini berisi metode untuk mendapatkan dan mengatur apakah autentikasi dua faktor diaktifkan untuk pengguna.IUserPhoneNumberStore
Antarmuka TUserPhoneNumberStore<TUser, TKey> menentukan metode yang harus Anda terapkan untuk menyimpan nomor telepon pengguna. Ini berisi metode untuk mendapatkan dan mengatur nomor telepon dan apakah nomor telepon dikonfirmasi.IUserEmailStore
Antarmuka TUser IUserEmailStore<, TKey> menentukan metode yang harus Anda terapkan untuk menyimpan alamat email pengguna. Ini berisi metode untuk mendapatkan dan mengatur alamat email dan apakah email dikonfirmasi.IUserLockoutStore
Antarmuka IUserLockoutStore<TUser, TKey> menentukan metode yang harus Anda terapkan untuk menyimpan informasi tentang mengunci akun. Ini berisi metode untuk mendapatkan jumlah upaya akses yang gagal saat ini, mendapatkan dan mengatur apakah akun dapat dikunci, mendapatkan dan mengatur tanggal akhir penguncian, meningkatkan jumlah upaya yang gagal, dan mengatur ulang jumlah upaya yang gagal.IQueryableUserStore
Antarmuka TUser IQueryableUserStore<, TKey> menentukan anggota yang harus Anda terapkan untuk menyediakan penyimpanan pengguna yang dapat dikueri. Ini berisi properti yang menyimpan pengguna yang dapat dikueri.Anda mengimplementasikan antarmuka yang diperlukan dalam aplikasi Anda; seperti, antarmuka IUserClaimStore, IUserLoginStore, IUserRoleStore, IUserPasswordStore, dan IUserSecurityStampStore seperti yang ditunjukkan di bawah ini.
public class UserStore : IUserStore<IdentityUser, int>,
IUserClaimStore<IdentityUser, int>,
IUserLoginStore<IdentityUser, int>,
IUserRoleStore<IdentityUser, int>,
IUserPasswordStore<IdentityUser, int>,
IUserSecurityStampStore<IdentityUser, int>
{
// interface implementations not shown
}
Untuk implementasi lengkap (termasuk semua antarmuka), lihat UserStore (MySQL).
IdentityUserClaim, IdentityUserLogin, dan IdentityUserRole
Namespace Layanan Microsoft.AspNet.Identity.EntityFramework berisi implementasi kelas IdentityUserClaim, IdentityUserLogin, dan IdentityUserRole . Jika Anda menggunakan fitur-fitur ini, Anda mungkin ingin membuat versi kelas ini sendiri dan menentukan properti untuk aplikasi Anda. Namun, terkadang lebih efisien untuk tidak memuat entitas ini ke dalam memori saat melakukan operasi dasar (seperti menambahkan atau menghapus klaim pengguna). Sebagai gantinya, kelas penyimpanan backend dapat menjalankan operasi ini langsung pada sumber data. Misalnya, metode UserStore.GetClaimsAsync() dapat memanggil userClaimTable.FindByUserId(user. Id) metode untuk menjalankan kueri pada tabel tersebut secara langsung dan mengembalikan daftar klaim.
public Task<IList<Claim>> GetClaimsAsync(IdentityUser user)
{
ClaimsIdentity identity = userClaimsTable.FindByUserId(user.Id);
return Task.FromResult<IList<Claim>>(identity.Claims.ToList());
}
Menyesuaikan kelas peran
Saat menerapkan penyedia penyimpanan Anda sendiri, Anda harus membuat kelas peran yang setara dengan kelas IdentityRole di namespace Microsoft.ASP.NET.Identity.EntityFramework :
Diagram berikut menunjukkan kelas IdentityRole yang harus Anda buat dan antarmuka untuk diterapkan di kelas ini.
Antarmuka IRole<TKey> menentukan properti yang coba dipanggil RoleManager saat melakukan operasi yang diminta. Antarmuka berisi dua properti - Id dan Nama. Antarmuka IRole<TKey> memungkinkan Anda menentukan jenis kunci untuk peran melalui parameter TKey generik. Jenis properti Id cocok dengan nilai parameter TKey.
Kerangka kerja Identitas juga menyediakan antarmuka IRole (tanpa parameter generik) saat Anda ingin menggunakan nilai string untuk kunci.
Contoh berikut menunjukkan kelas IdentityRole yang menggunakan bilangan bulat untuk kunci. Bidang Id diatur ke int agar sesuai dengan nilai parameter generik.
public class IdentityRole : IRole<int>
{
public IdentityRole() { ... }
public IdentityRole(string roleName) { ... }
public int Id { get; set; }
public string Name { get; set; }
}
Untuk implementasi lengkap, lihat IdentityRole (MySQL).
Menyesuaikan penyimpanan peran
Anda juga membuat kelas RoleStore yang menyediakan metode untuk semua operasi data pada peran. Kelas ini setara dengan kelas RoleStore<TRole> di namespace Layanan Microsoft.ASP.NET.Identity.EntityFramework. Di kelas RoleStore, Anda menerapkan IRoleStore<TRole, TKey>, dan secara opsional antarmuka IQueryableRoleStore<TRole, TKey>.
Contoh berikut menunjukkan kelas penyimpanan peran. Parameter generik TRole mengambil jenis kelas peran Anda yang biasanya merupakan kelas IdentityRole yang Anda tentukan. Parameter generik TKey mengambil jenis kunci peran Anda.
public class RoleStore : IRoleStore<IdentityRole, int>
{
public RoleStore() { ... }
public RoleStore(ExampleStorage database) { ... }
public Task CreateAsync(IdentityRole role) { ... }
public Task DeleteAsync(IdentityRole role) { ... }
public Task<IdentityRole> FindByIdAsync(int roleId) { ... }
public Task<IdentityRole> FindByNameAsync(string roleName) { ... }
public Task UpdateAsync(IdentityRole role) { ... }
public void Dispose() { ... }
}
IRoleStore<TRole>
Antarmuka IRoleStore menentukan metode yang akan diterapkan di kelas penyimpanan peran Anda. Ini berisi metode untuk membuat, memperbarui, menghapus, dan mengambil peran.RoleStore<TRole>
Untuk menyesuaikan RoleStore, buat kelas yang mengimplementasikan antarmuka IRoleStore. Anda hanya perlu menerapkan kelas ini jika ingin menggunakan peran pada sistem Anda. Konstruktor yang mengambil parameter bernama database jenis ExampleDatabase hanyalah ilustrasi tentang cara meneruskan kelas akses data Anda. Misalnya, dalam implementasi MySQL, konstruktor ini mengambil parameter jenis MySQLDatabase.Untuk implementasi lengkap, lihat RoleStore (MySQL) .
Mengonfigurasi ulang aplikasi untuk menggunakan penyedia penyimpanan baru
Anda telah menerapkan penyedia penyimpanan baru Anda. Sekarang, Anda harus mengonfigurasi aplikasi Anda untuk menggunakan penyedia penyimpanan ini. Jika penyedia penyimpanan default disertakan dalam proyek Anda, Anda harus menghapus penyedia default dan menggantinya dengan penyedia Anda.
Ganti penyedia penyimpanan default dalam proyek MVC
Di jendela Kelola Paket NuGet , hapus instalan paket Microsoft ASP.NET Identity EntityFramework . Anda dapat menemukan paket ini dengan mencari di paket Terinstal untuk Identity.EntityFramework.
Anda akan ditanya apakah Anda juga ingin menghapus instalasi Entity Framework. Jika Anda tidak membutuhkannya di bagian lain aplikasi, Anda dapat menghapus instalasinya.
Dalam file IdentityModels.cs di folder Model, hapus atau komentari kelas ApplicationUser dan ApplicationDbContext . Dalam aplikasi MVC, Anda dapat menghapus seluruh file IdentityModels.cs. Dalam aplikasi Web Forms, hapus dua kelas tetapi pastikan Anda menyimpan kelas pembantu yang juga terletak di file IdentityModels.cs.
Jika penyedia penyimpanan Anda berada di proyek terpisah, tambahkan referensi ke dalam aplikasi web Anda.
Ganti semua referensi ke
using Microsoft.AspNet.Identity.EntityFramework;
dengan pernyataan penggunaan untuk namespace penyedia penyimpanan Anda.Di kelas Startup.Auth.cs , ubah metode ConfigureAuth untuk menggunakan satu instans dari konteks yang sesuai.
public void ConfigureAuth(IAppBuilder app) { app.CreatePerOwinContext(ExampleStorageContext.Create); app.CreatePerOwinContext(ApplicationUserManager.Create); ...
Di folder App_Start, buka IdentityConfig.cs. Di kelas ApplicationUserManager, ubah metode Buat untuk mengembalikan manajer pengguna yang menggunakan penyimpanan pengguna yang disesuaikan.
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) { var manager = new ApplicationUserManager(new UserStore(context.Get<ExampleStorageContext>())); ... }
Ganti semua referensi ke ApplicationUser dengan IdentityUser.
Proyek default mencakup beberapa anggota di kelas pengguna yang tidak ditentukan dalam antarmuka IUser; seperti Email, PasswordHash, dan GenerateUserIdentityAsync. Jika kelas pengguna Anda tidak memiliki anggota ini, Anda harus menerapkannya atau mengubah kode yang menggunakan anggota ini.
Jika Anda telah membuat instans RoleManager apa pun, ubah kode tersebut untuk menggunakan kelas RoleStore baru Anda.
var roleManager = new RoleManager<IdentityRole>(new RoleStore(context.Get<ExampleStorageContext>()));
Proyek default dirancang untuk kelas pengguna yang memiliki nilai string untuk kunci. Jika kelas pengguna Anda memiliki jenis yang berbeda untuk kunci (seperti bilangan bulat), Anda harus mengubah proyek agar berfungsi dengan jenis Anda. Lihat Mengubah Kunci Primer untuk Pengguna di Identitas ASP.NET.
Jika diperlukan, tambahkan string koneksi ke file Web.config.
Sumber daya lainnya
- Blog: Menerapkan Identitas ASP.NET
- Tutorial dan kode GIT: Simple.Data Asp.Net Identity Provider
- Tutorial: Menyiapkan akun Identitas dasar, dan mengarahkannya ke DB eksternal. Dengan @xivSolutions.
- Tutorial: Menerapkan Penyedia Penyimpanan Identitas ASP.NET MySQL Kustom
- Entitas CodeFluent oleh SoftFluent
- Azure Table Storage oleh James Randall.
- Azure Table Storage: AspNet.Identity.TableStorage menurut @stuartleeks.
- CouchDB / Cloudant oleh Daniel Wertheim.
- Elastic Search: Identitas Elastis oleh Bombsquad AB.
- MongoDB oleh Jonathan Sheely Jonathan Sheely.
- NHibernate.AspNet.Identity oleh Antônio Milesi Bastos.
- RavenDB oleh @tourismgeek.
- RavenDB.AspNet.Identity oleh ILMServices.
- Redis: Redis.AspNet.Identity
- Templat T4 untuk menghasilkan kode EF untuk penyimpanan pengguna "database pertama": AspNet.Identity.EntityFramework