ASP.NET Core projelerinde yapı iskelesi Identity
Gönderen Rick Anderson
ASP.NET Core ASP.NET Core Identity bir Razor sınıf kitaplığıolarak sunulur. Dahil edilen uygulamalar, Identity Identity Razor sınıf kitaplığı 'nda (RCL) bulunan kaynak kodu seçmeli olarak eklemek için desteği uygulayabilir. Kodu değiştirebilmeniz ve davranışı değiştirebilmek için kaynak kodu oluşturmak isteyebilirsiniz. Örneğin, kayıt sırasında kullanılan kodu oluşturmak için desteği ' ı söyleyebilirsiniz. Oluşturulan kod RCL 'deki aynı koda göre önceliklidir Identity . Kullanıcı arabirimine tam denetim sağlamak ve varsayılan RCL 'yi kullanmak için, tam Identity UI kaynağı oluşturmabölümüne bakın.
Kimlik doğrulaması içermeyen uygulamalar , RCL paketini eklemek için desteği uygulayabilir Identity . Oluşturulacak kodu seçme seçeneğiniz vardır Identity .
Desteği gerekli kodların çoğunu üretse de, işlemi gerçekleştirmek için projenizi güncelleştirmeniz gerekir. Bu belgede, bir yapı iskelesi güncelleştirmesini tamamlaması için gereken adımlar açıklanmaktadır Identity .
Dosya farklılıklarını gösteren ve değişikliklerden geri dönüş yapmanızı sağlayan bir kaynak denetimi sistemi kullanmanızı öneririz. Scaffolder çalıştırıldıktan sonra değişiklikleri inceleyin Identity .
Iki öğeli kimlik doğrulaması, Hesap onaylama ve parola kurtarmaile diğer güvenlik özellikleri kullanılırken hizmetler gereklidir Identity . Hizmetler veya hizmet saplamaları, yapı iskelesi sırasında oluşturulmaz Identity . Bu özelliklerin etkinleştirilmesi için hizmetlerin el ile eklenmesi gerekir. Örneğin, bkz. e-posta onayı gerektir.
IdentityYeni bir veri bağlamıyla, var olan bireysel hesaplara sahip bir projeye dönüştürme yaparken:
- İçinde
Startup.ConfigureServices, şu çağrıları kaldırın:AddDbContextAddDefaultIdentity
Örneğin, AddDbContext ve AddDefaultIdentity aşağıdaki kodda yorum yapılır:
public void ConfigureServices(IServiceCollection services)
{
//services.AddDbContext<ApplicationDbContext>(options =>
// options.UseSqlServer(
// Configuration.GetConnectionString("DefaultConnection")));
//services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
// .AddEntityFrameworkStores<ApplicationDbContext>();
services.AddControllersWithViews();
services.AddRazorPages();
}
Yukarıdaki kod, alanlarda/ Identity / Identity hostingstartup. cs dosyasında çoğaltılan kodu Yorumlar
Genellikle, bireysel hesaplarla oluşturulan uygulamalar yeni bir veri bağlamı oluşturmamalıdır .
IdentityBoş bir projeye yapı iskelesi
IdentityScaffolder 'ı çalıştırın:
- Çözüm Gezgini, projeye sağ tıklayıp > Yeni iskli öğe Ekle >.
- Yeni yapı iskelesi öğesi Ekle iletişim kutusunun sol bölmesinde Ekle ' yi seçin Identity > .
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
~/Pages/Shared/_Layout.cshtmlRazorsayfalar için~/Views/Shared/_Layout.cshtmlMVC projeleri için- Blazor Server Şablondan oluşturulan uygulamalar, Blazor Server
blazorserverRazor Varsayılan olarak sayfalar veya MVC için yapılandırılmamıştır. Düzen sayfası girişini boş bırakın.
- + Yeni bir veri bağlamı sınıfı oluşturmak için düğmeyi seçin. Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
MyApplication.Data.ApplicationDbContext).
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
- Add (Ekle) seçeneğini belirleyin.
StartupSınıfını aşağıdakine benzer kodla güncelleştirin:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
}
UseHsts önerilir, ancak gerekli değildir. Daha fazla bilgi için bkz. http katı aktarım güvenliği Protokolü.
Oluşturulan veritabanı Identity kodu, Geçişler Entity Framework Core gerektirir. Bir geçiş oluşturun ve veritabanını güncelleştirin. Örneğin, aşağıdaki komutları çalıştırın:
Visual Studio Paket Yöneticisi konsolunda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun Identity "Şema Oluştur" ad Add-Migration parametresi rastgeledir. "CreateIdentitySchema" geçişi açıklar.
Identity Razor Var olan yetkilendirme olmadan bir projeye yapı iskelesi yapın
IdentityScaffolder 'ı çalıştırın:
- Çözüm Gezgini, projeye sağ tıklayıp > Yeni iskli öğe Ekle >.
- Yeni yapı iskelesi öğesi Ekle iletişim kutusunun sol bölmesinde Ekle ' yi seçin Identity > .
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
~/Pages/Shared/_Layout.cshtmlRazorsayfalar için~/Views/Shared/_Layout.cshtmlMVC projeleri için- Blazor Server Şablondan oluşturulan uygulamalar, Blazor Server
blazorserverRazor Varsayılan olarak sayfalar veya MVC için yapılandırılmamıştır. Düzen sayfası girişini boş bırakın.
- + Yeni bir veri bağlamı sınıfı oluşturmak için düğmeyi seçin. Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
MyApplication.Data.ApplicationDbContext).
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
- Add (Ekle) seçeneğini belirleyin.
Identity, alanlarda/ Identity / Identity hostingstartup. cs' de yapılandırılır. Daha fazla bilgi için bkz. ıhostingstartup.
Geçişler, UseAuthentication ve düzen
Oluşturulan veritabanı Identity kodu, Geçişler Entity Framework Core gerektirir. Bir geçiş oluşturun ve veritabanını güncelleştirin. Örneğin, aşağıdaki komutları çalıştırın:
Visual Studio Paket Yöneticisi konsolunda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun Identity "Şema Oluştur" ad Add-Migration parametresi rastgeledir. "CreateIdentitySchema" geçişi açıklar.
Kimlik doğrulamayı etkinleştir
StartupSınıfını aşağıdakine benzer kodla güncelleştirin:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
UseHsts önerilir, ancak gerekli değildir. Daha fazla bilgi için bkz. http katı aktarım güvenliği Protokolü.
Düzen değişiklikleri
İsteğe bağlı: () oturum açma bilgilerini _LoginPartial Düzen dosyasına ekleyin:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebRP</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-page="/Index">WebRP</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<partial name="_LoginPartial" />
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2019 - WebRP - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@RenderSection("Scripts", required: false)
</body>
</html>
Identity Razor Yetkilendirmeyle bir projeye yapı
İskeleyi Identity çalıştırın:
- 'Çözüm Gezgini Yeni İskeleLi Öğe Ekle'> > projesine sağ tıklayın.
- İskele Ekle iletişim kutusunun sol bölmesinde Ekle'yi Identity > seçin.
- Ekle iletişim Identity kutusunda istediğiniz seçenekleri belirleyin.
- Düzen dosyanın üzerine yanlış işaretlemeyle yazılmak için var olan düzen sayfanızı seçin. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
~/Pages/Shared/_Layout.cshtmlMevcut Razor Pages Blazor Server altyapısına sahip Sayfalar veya projeler Razor için~/Views/Shared/_Layout.cshtmlMevcut MVC altyapısına Blazor Server sahip MVC projeleri veya projeleri için
- Düzen dosyanın üzerine yanlış işaretlemeyle yazılmak için var olan düzen sayfanızı seçin. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
- Mevcut veri bağlamınızı kullanmak için geçersiz kılınan en az bir dosya seçin. Veri bağlamınızı eklemek için en az bir dosya seçmeniz gerekir.
- Veri bağlamı sınıfınızı seçin.
- Add (Ekle) seçeneğini belirleyin.
- Yeni bir kullanıcı bağlamı oluşturmak ve büyük olasılıkla için özel bir kullanıcı sınıfı oluşturmak Identity için:
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
MyApplication.Data.ApplicationDbContext). - Add (Ekle) seçeneğini belirleyin.
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
Not: Yeni bir kullanıcı bağlamı oluşturuyorsanız geçersiz kılmak için bir dosya seçmenize gerek yok.
İskeleyi Identity çalıştırın:
- 'Çözüm Gezgini Yeni İskeleLi Öğe Ekle'> > projesine sağ tıklayın.
- İskele Ekle iletişim kutusunun sol bölmesinde Ekle'yi Identity > seçin.
- Ekle iletişim Identity kutusunda istediğiniz seçenekleri belirleyin.
- Mevcut düzen sayfanızı seçin, yoksa düzen dosyanız yanlış işaretlemeyle üzerine yazılır. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
~/Pages/Shared/_Layout.cshtmlSayfalar Razor için~/Views/Shared/_Layout.cshtmlMVC projeleri için
- Mevcut düzen sayfanızı seçin, yoksa düzen dosyanız yanlış işaretlemeyle üzerine yazılır. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
- Mevcut veri bağlamınızı kullanmak için geçersiz kılınan en az bir dosya seçin. Veri bağlamınızı eklemek için en az bir dosya seçmeniz gerekir.
- Veri bağlamı sınıfınızı seçin.
- Add (Ekle) seçeneğini belirleyin.
- Yeni bir kullanıcı bağlamı oluşturmak ve büyük olasılıkla için özel bir kullanıcı sınıfı oluşturmak Identity için:
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
MyApplication.Data.ApplicationDbContext). - Add (Ekle) seçeneğini belirleyin.
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
Not: Yeni bir kullanıcı bağlamı oluşturuyorsanız geçersiz kılmak için bir dosya seçmenize gerek yok.
Bazı Identity Seçenekler, alanlarda/ Identity / Identity hostingstartup. cs' de yapılandırılır. Daha fazla bilgi için bkz. ıhostingstartup.
IdentityVar olan yetkilendirme olmadan BIR MVC projesinde yapı iskelesi yapın
IdentityScaffolder 'ı çalıştırın:
- Çözüm Gezgini, projeye sağ tıklayıp > Yeni iskli öğe Ekle >.
- Yeni yapı iskelesi öğesi Ekle iletişim kutusunun sol bölmesinde Ekle ' yi seçin Identity > .
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
~/Pages/Shared/_Layout.cshtmlRazorsayfalar için~/Views/Shared/_Layout.cshtmlMVC projeleri için- Blazor Server Şablondan oluşturulan uygulamalar, Blazor Server
blazorserverRazor Varsayılan olarak sayfalar veya MVC için yapılandırılmamıştır. Düzen sayfası girişini boş bırakın.
- + Yeni bir veri bağlamı sınıfı oluşturmak için düğmeyi seçin. Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
MyApplication.Data.ApplicationDbContext).
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
- Add (Ekle) seçeneğini belirleyin.
İsteğe bağlı: bir Login ( _LoginPartial ) öğesini views/Shared/_Layout. cshtml dosyasına ekleyin:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebRP</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-page="/Index">WebRP</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<partial name="_LoginPartial" />
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2019 - WebRP - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@RenderSection("Scripts", required: false)
</body>
</html>
- Pages/Shared/_LoginPartial. cshtml dosyasını views/Shared/_LoginPartial. cshtml olarak taşıyın
Identity, alanlarda/ Identity / Identity hostingstartup. cs' de yapılandırılır. Daha fazla bilgi için bkz. ıhostingstartup.
Oluşturulan veritabanı Identity kodu, Geçişler Entity Framework Core gerektirir. Bir geçiş oluşturun ve veritabanını güncelleştirin. Örneğin, aşağıdaki komutları çalıştırın:
Visual Studio Paket Yöneticisi konsolunda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun Identity "Şema Oluştur" ad Add-Migration parametresi rastgeledir. "CreateIdentitySchema" geçişi açıklar.
StartupSınıfını aşağıdakine benzer kodla güncelleştirin:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
}
UseHsts önerilir, ancak gerekli değildir. Daha fazla bilgi için bkz. http katı aktarım güvenliği Protokolü.
IdentityYetkilendirme ile BIR MVC projesinde yapı iskelesi oluşturma
İskeleyi Identity çalıştırın:
- 'Çözüm Gezgini Yeni İskeleLi Öğe Ekle'> > projesine sağ tıklayın.
- İskele Ekle iletişim kutusunun sol bölmesinde Ekle'yi Identity > seçin.
- Ekle iletişim Identity kutusunda istediğiniz seçenekleri belirleyin.
- Düzen dosyanın üzerine yanlış işaretlemeyle yazılmak için var olan düzen sayfanızı seçin. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
~/Pages/Shared/_Layout.cshtmlMevcut Razor Pages Blazor Server altyapısına sahip Sayfalar veya projeler Razor için~/Views/Shared/_Layout.cshtmlMevcut MVC altyapısına Blazor Server sahip MVC projeleri veya projeleri için
- Düzen dosyanın üzerine yanlış işaretlemeyle yazılmak için var olan düzen sayfanızı seçin. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
- Mevcut veri bağlamınızı kullanmak için geçersiz kılınan en az bir dosya seçin. Veri bağlamınızı eklemek için en az bir dosya seçmeniz gerekir.
- Veri bağlamı sınıfınızı seçin.
- Add (Ekle) seçeneğini belirleyin.
- Yeni bir kullanıcı bağlamı oluşturmak ve büyük olasılıkla için özel bir kullanıcı sınıfı oluşturmak Identity için:
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
MyApplication.Data.ApplicationDbContext). - Add (Ekle) seçeneğini belirleyin.
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
Not: Yeni bir kullanıcı bağlamı oluşturuyorsanız geçersiz kılmak için bir dosya seçmenize gerek yok.
İskeleyi Identity çalıştırın:
- 'Çözüm Gezgini Yeni İskeleLi Öğe Ekle'> > projesine sağ tıklayın.
- İskele Ekle iletişim kutusunun sol bölmesinde Ekle'yi Identity > seçin.
- Ekle iletişim Identity kutusunda istediğiniz seçenekleri belirleyin.
- Mevcut düzen sayfanızı seçin, yoksa düzen dosyanız yanlış işaretlemeyle üzerine yazılır. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
~/Pages/Shared/_Layout.cshtmlSayfalar Razor için~/Views/Shared/_Layout.cshtmlMVC projeleri için
- Mevcut düzen sayfanızı seçin, yoksa düzen dosyanız yanlış işaretlemeyle üzerine yazılır. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
- Mevcut veri bağlamınızı kullanmak için geçersiz kılınan en az bir dosya seçin. Veri bağlamınızı eklemek için en az bir dosya seçmeniz gerekir.
- Veri bağlamı sınıfınızı seçin.
- Add (Ekle) seçeneğini belirleyin.
- Yeni bir kullanıcı bağlamı oluşturmak ve büyük olasılıkla için özel bir kullanıcı sınıfı oluşturmak Identity için:
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
MyApplication.Data.ApplicationDbContext). - Add (Ekle) seçeneğini belirleyin.
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
Not: Yeni bir kullanıcı bağlamı oluşturuyorsanız geçersiz kılmak için bir dosya seçmenize gerek yok.
Identity Blazor Server Var olan yetkilendirme olmadan bir projeye yapı iskelesi yapın
IdentityScaffolder 'ı çalıştırın:
- Çözüm Gezgini, projeye sağ tıklayıp > Yeni iskli öğe Ekle >.
- Yeni yapı iskelesi öğesi Ekle iletişim kutusunun sol bölmesinde Ekle ' yi seçin Identity > .
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
~/Pages/Shared/_Layout.cshtmlRazorsayfalar için~/Views/Shared/_Layout.cshtmlMVC projeleri için- Blazor Server Şablondan oluşturulan uygulamalar, Blazor Server
blazorserverRazor Varsayılan olarak sayfalar veya MVC için yapılandırılmamıştır. Düzen sayfası girişini boş bırakın.
- + Yeni bir veri bağlamı sınıfı oluşturmak için düğmeyi seçin. Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
MyApplication.Data.ApplicationDbContext).
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
- Add (Ekle) seçeneğini belirleyin.
Identity, alanlarda/ Identity / Identity hostingstartup. cs' de yapılandırılır. Daha fazla bilgi için bkz. ıhostingstartup.
Geçişler
Oluşturulan veritabanı Identity kodu, Geçişler Entity Framework Core gerektirir. Bir geçiş oluşturun ve veritabanını güncelleştirin. Örneğin, aşağıdaki komutları çalıştırın:
Visual Studio Paket Yöneticisi konsolunda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun Identity "Şema Oluştur" ad Add-Migration parametresi rastgeledir. "CreateIdentitySchema" geçişi açıklar.
Uygulamaya bir XSRF belirteci geçirin
Belirteçler bileşenlere geçirilebilir:
- Kimlik doğrulama belirteçleri sağlandığında ve kimlik doğrulamasına kaydedildiğinde cookie , bunlar bileşenlere geçirilebilir.
- Razor bileşenler doğrudan kullanamaz
HttpContext. bu nedenle, tarihinde oturum kapatma uç noktasına gönderi için bir istek önleme zaman AŞıMı (XSRF) belirteci elde etmenin bir yolu yoktur Identity/Identity/Account/Logout. Bir XSRF belirteci bileşenlere geçirilebilir.
Daha fazla bilgi için bkz. ASP.NET Core Blazor Server ek güvenlik senaryoları.
Pages/_Host. cshtml dosyasında, ve sınıflarına eklendikten sonra belirteci oluşturun InitialApplicationState TokenProvider :
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf
...
var tokens = new InitialApplicationState
{
...
XsrfToken = Xsrf.GetAndStoreTokens(HttpContext).RequestToken
};
Şunu App atamak için bileşeni (app. Razor) güncelleştirin InitialState.XsrfToken :
@inject TokenProvider TokenProvider
...
TokenProvider.XsrfToken = InitialState.XsrfToken;
TokenProviderKonusunda gösterilen hizmet, LoginDisplay bileşeninde aşağıdaki Düzen ve kimlik doğrulama akışı değişiklikleri bölümünde kullanılır.
Kimlik doğrulamayı etkinleştir
StartupSınıfında:
- RazorSayfaların hizmetlerinin eklendiğini onaylayın
Startup.ConfigureServices. - TokenProviderkullanılıyorsa, hizmeti kaydedin.
UseDatabaseErrorPageGeliştirme ortamı için içindeki uygulama oluşturucuda çağırınStartup.Configure.- Çağırın
UseAuthenticationveUseAuthorizationsonraUseRouting. - Sayfalar için bir uç nokta ekleyin Razor .
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddSingleton<WeatherForecastService>();
services.AddScoped<TokenProvider>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});
}
UseHsts önerilir, ancak gerekli değildir. Daha fazla bilgi için bkz. http katı aktarım güvenliği Protokolü.
Düzen ve kimlik doğrulama akışı değişiklikleri
RedirectToLoginUygulamanın proje kökündeki paylaşılan klasörüne bir bileşen (redirecttologin. Razor) ekleyin:
@inject NavigationManager Navigation
@code {
protected override void OnInitialized()
{
Navigation.NavigateTo("Identity/Account/Login?returnUrl=" +
Uri.EscapeDataString(Navigation.Uri), true);
}
}
LoginDisplayUygulamanın paylaşılan klasörüne bir bileşen (logindisplay. Razor) ekleyin. TokenProvider hizmeti , Identity oturum kapatma uç noktasına gönderilen HTML formu için XSRF belirteci sağlar:
@using Microsoft.AspNetCore.Components.Authorization
@inject NavigationManager Navigation
@inject TokenProvider TokenProvider
<AuthorizeView>
<Authorized>
<a href="Identity/Account/Manage/Index">
Hello, @context.User.Identity.Name!
</a>
<form action="/Identity/Account/Logout?returnUrl=%2F" method="post">
<button class="nav-link btn btn-link" type="submit">Logout</button>
<input name="__RequestVerificationToken" type="hidden"
value="@TokenProvider.XsrfToken">
</form>
</Authorized>
<NotAuthorized>
<a href="Identity/Account/Register">Register</a>
<a href="Identity/Account/Login">Login</a>
</NotAuthorized>
</AuthorizeView>
MainLayoutBileşende (paylaşılan/mainlayout. Razor), LoginDisplay bileşeni en üst satır <div> öğesinin içeriğine ekleyin:
<div class="top-row px-4 auth">
<LoginDisplay />
<a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a>
</div>
Stil kimlik doğrulama uç noktaları
Blazor Server Razor Sayfa sayfalarını kullandığından Identity , bir ziyaretçi sayfalar ve bileşenler arasında gezinse Kullanıcı arabiriminin stili değişir Identity . Uyumsuz stillere yönelik iki seçeneğiniz vardır:
Derleme Identity bileşenleri
Bileşenler oluşturmak için bileşenleri kullanmanın bir yaklaşımı Identity , Identity bileşenleri oluşturmaktır. SignInManager UserManager Razor Bileşenlerinde desteklenmediğinden, Blazor Server Kullanıcı hesabı EYLEMLERINI işlemek için uygulamadaki API uç noktalarını kullanın.
Uygulama stilleriyle özel düzen kullanma Blazor
IdentitySayfa düzeni ve stilleri, varsayılan temayı kullanan sayfalar oluşturmak için değiştirilebilir Blazor .
Not
Bu bölümdeki örnek yalnızca özelleştirme için bir başlangıç noktasıdır. En iyi kullanıcı deneyimi için büyük olasılıkla ek çalışma gerekir.
Yeni bir NavMenu_IdentityLayout bileşen oluşturun (paylaşılan/NavMenu_ Identity Layout. Razor). Bileşenin biçimlendirmesi ve kodu için, uygulamanın bileşeniyle aynı içeriği kullanın NavMenu (paylaşılan/navmenu. Razor). NavLinkBileşendeki otomatik yeniden yönlendirmeler RedirectToLogin kimlik doğrulama veya yetkilendirme gerektiren bileşenler için başarısız olduğundan anonim olarak erişilemeyen bileşenlere her birini kaldırın.
Sayfalar/paylaşılan/Layout. cshtml dosyasında aşağıdaki değişiklikleri yapın:
RazorEtiket yardımcıları ve uygulamanın bileşenlerini paylaşılan klasörde kullanmak için dosyanın en üstüne yönergeler ekleyin:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @using {APPLICATION ASSEMBLY}.Shared{APPLICATION ASSEMBLY}Uygulamanın derleme adıyla değiştirin.İçeriğe bir
<base>etiket ve Blazor stil sayfası ekleyin<link><head>:<base href="~/" /> <link rel="stylesheet" href="~/css/site.css" /><body>Etiketin içeriğini aşağıdaki şekilde değiştirin:<div class="sidebar" style="float:left"> <component type="typeof(NavMenu_IdentityLayout)" render-mode="ServerPrerendered" /> </div> <div class="main" style="padding-left:250px"> <div class="top-row px-4"> @{ var result = Engine.FindView(ViewContext, "_LoginPartial", isMainPage: false); } @if (result.Success) { await Html.RenderPartialAsync("_LoginPartial"); } else { throw new InvalidOperationException("The default Identity UI " + "layout requires a partial view '_LoginPartial'."); } <a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a> </div> <div class="content px-4"> @RenderBody() </div> </div> <script src="~/Identity/lib/jquery/dist/jquery.min.js"></script> <script src="~/Identity/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script> <script src="~/Identity/js/site.js" asp-append-version="true"></script> @RenderSection("Scripts", required: false) <script src="_framework/blazor.server.js"></script>
Identity Blazor Server Yetkilendirmeyle bir projeye yapı
İskeleyi Identity çalıştırın:
- 'Çözüm Gezgini Yeni İskeleLi Öğe Ekle'> > projesine sağ tıklayın.
- İskele Ekle iletişim kutusunun sol bölmesinde Ekle'yi Identity > seçin.
- Ekle iletişim Identity kutusunda istediğiniz seçenekleri belirleyin.
- Düzen dosyanın üzerine yanlış işaretlemeyle yazılmak için var olan düzen sayfanızı seçin. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
~/Pages/Shared/_Layout.cshtmlMevcut Razor Pages Blazor Server altyapısına sahip Sayfalar veya projeler Razor için~/Views/Shared/_Layout.cshtmlMevcut MVC altyapısına Blazor Server sahip MVC projeleri veya projeleri için
- Düzen dosyanın üzerine yanlış işaretlemeyle yazılmak için var olan düzen sayfanızı seçin. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
- Mevcut veri bağlamınızı kullanmak için geçersiz kılınan en az bir dosya seçin. Veri bağlamınızı eklemek için en az bir dosya seçmeniz gerekir.
- Veri bağlamı sınıfınızı seçin.
- Add (Ekle) seçeneğini belirleyin.
- Yeni bir kullanıcı bağlamı oluşturmak ve büyük olasılıkla için özel bir kullanıcı sınıfı oluşturmak Identity için:
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
MyApplication.Data.ApplicationDbContext). - Add (Ekle) seçeneğini belirleyin.
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
Not: Yeni bir kullanıcı bağlamı oluşturuyorsanız geçersiz kılmak için bir dosya seçmenize gerek yok.
İskeleyi Identity çalıştırın:
- 'Çözüm Gezgini Yeni İskeleLi Öğe Ekle'> > projesine sağ tıklayın.
- İskele Ekle iletişim kutusunun sol bölmesinde Ekle'yi Identity > seçin.
- Ekle iletişim Identity kutusunda istediğiniz seçenekleri belirleyin.
- Mevcut düzen sayfanızı seçin, yoksa düzen dosyanız yanlış işaretlemeyle üzerine yazılır. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
~/Pages/Shared/_Layout.cshtmlSayfalar Razor için~/Views/Shared/_Layout.cshtmlMVC projeleri için
- Mevcut düzen sayfanızı seçin, yoksa düzen dosyanız yanlış işaretlemeyle üzerine yazılır. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
- Mevcut veri bağlamınızı kullanmak için geçersiz kılınan en az bir dosya seçin. Veri bağlamınızı eklemek için en az bir dosya seçmeniz gerekir.
- Veri bağlamı sınıfınızı seçin.
- Add (Ekle) seçeneğini belirleyin.
- Yeni bir kullanıcı bağlamı oluşturmak ve büyük olasılıkla için özel bir kullanıcı sınıfı oluşturmak Identity için:
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
MyApplication.Data.ApplicationDbContext). - Add (Ekle) seçeneğini belirleyin.
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
Not: Yeni bir kullanıcı bağlamı oluşturuyorsanız geçersiz kılmak için bir dosya seçmenize gerek yok.
Bazı Identity Seçenekler, alanlarda/ Identity / Identity hostingstartup. cs' de yapılandırılır. Daha fazla bilgi için bkz. ıhostingstartup.
Tek başına veya barındırılan Blazor WebAssembly uygulamalar
İstemci tarafı Blazor WebAssembly uygulamalar kendi Identity Kullanıcı arabirimi yaklaşımlarını kullanır ve ASP.NET Core Identity Yapı iskelesi kullanamaz. barındırılan çözümlerin sunucu tarafı ASP.NET Core uygulamaları Blazor , Razor bu makaledeki sayfalar/MVC kılavuzlarını izleyebilir ve ' nin desteklediği diğer ASP.NET Core uygulama türleri gibi yapılandırılır Identity .
BlazorÇerçeve, Razor UI sayfalarının bileşen sürümlerini içermez Identity . Identity UI Razor bileşenleri, desteklenmeyen üçüncü taraf kaynaklarından özel olarak oluşturulmuş veya alınmış olabilir.
Daha fazla bilgi için bkz. Blazor güvenlik ve Identity makaleler.
Tam Identity UI kaynağı oluştur
Kullanıcı arabiriminin tam denetimini sürdürmek için Identity , Identity desteği ' ı çalıştırın ve tüm dosyaları geçersiz kıl' ı seçin.
aşağıdaki vurgulanan kod, varsayılan Identity kullanıcı arabirimini Identity ASP.NET Core 2,1 web uygulamasında değiştirecek değişiklikleri gösterir. Bunu, Kullanıcı arabirimine tam denetim sağlamak için yapmak isteyebilirsiniz Identity .
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<IdentityUser, IdentityRole>()
// services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
});
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = $"/Identity/Account/Login";
options.LogoutPath = $"/Identity/Account/Logout";
options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});
// using Microsoft.AspNetCore.Identity.UI.Services;
services.AddSingleton<IEmailSender, EmailSender>();
}
Varsayılan değer Identity aşağıdaki kodda değiştirilmiştir:
services.AddIdentity<IdentityUser, IdentityRole>()
// services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
Aşağıdaki kod, Loginpath, Logoutpathve AccessDeniedPathöğesini ayarlar:
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = $"/Identity/Account/Login";
options.LogoutPath = $"/Identity/Account/Logout";
options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});
Bir IEmailSender uygulamayı kaydedin, örneğin:
// using Microsoft.AspNetCore.Identity.UI.Services;
services.AddSingleton<IEmailSender, EmailSender>();
public class EmailSender : IEmailSender
{
public Task SendEmailAsync(string email, string subject, string message)
{
return Task.CompletedTask;
}
}
Parola Yapılandırması
' PasswordOptions De yapılandırılmışsa Startup.ConfigureServices , [StringLength] Password Yapı iskelesi sayfalarında özelliği için öznitelik yapılandırması gerekli olabilir Identity . InputModel``Passwordaşağıdaki dosyalarda özellikler bulunur:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/Identity/Pages/Account/ResetPassword.cshtml.cs
Sayfayı devre dışı bırakma
Bu bölümler, kaydetme sayfasının nasıl devre dışı bırakılacağını gösterir, ancak herhangi bir sayfayı devre dışı bırakmak için yaklaşım kullanılabilir.
Kullanıcı kaydını devre dışı bırakmak için:
Yapı iskelesi Identity . Account. Register, Account. Login ve account. RegisterConfirmation bilgilerini ekleyin. Örnek:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"Kullanıcıları bu uç noktadan kaydedememesi için alanı/ Identity /Pages/Account/Register.cshtml.cs güncelleştir:
public class RegisterModel : PageModel { public IActionResult OnGet() { return RedirectToPage("Login"); } public IActionResult OnPost() { return RedirectToPage("Login"); } }Önceki değişikliklerle tutarlı olması için Areas/ Identity /Pages/Account/Register.exe öğesini güncelleştirin:
@page @model RegisterModel @{ ViewData["Title"] = "Go to Login"; } <h1>@ViewData["Title"]</h1> <li class="nav-item"> <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a> </li>/ Identity /Pages/Account/Login.exe içindeki kayıt bağlantısını açıklama veya Kaldır
@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@Areas/ Identity /Pages/Account/registerconfirmation sayfasını güncelleştirin.
- Cshtml dosyasındaki kodu ve bağlantıları kaldırın.
- Onay kodunu şuradan kaldırın
PageModel:
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Kullanıcıları eklemek için başka bir uygulama kullanma
Web uygulaması dışındaki kullanıcıları eklemek için bir mekanizma sağlar. Kullanıcı ekleme seçenekleri şunlardır:
- Adanmış bir yönetim Web uygulaması.
- Bir konsol uygulaması.
Aşağıdaki kod, kullanıcı eklemeye yönelik bir yaklaşımı özetler:
- Kullanıcıların listesi belleği okur.
- Her Kullanıcı için güçlü bir benzersiz parola oluşturulur.
- Kullanıcı Identity veritabanına eklenir.
- Kullanıcıya bildirilir ve parolayı değiştirmesi bildirilir.
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<AppDbCntx>();
context.Database.Migrate();
var config = host.Services.GetRequiredService<IConfiguration>();
var userList = config.GetSection("userList").Get<List<string>>();
SeedData.Initialize(services, userList).Wait();
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred adding users.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Aşağıdaki kod, bir kullanıcı ekleme ana hatlarıyla verilmiştir:
public static async Task Initialize(IServiceProvider serviceProvider,
List<string> userList)
{
var userManager = serviceProvider.GetService<UserManager<IdentityUser>>();
foreach (var userName in userList)
{
var userPassword = GenerateSecurePassword();
var userId = await EnsureUser(userManager, userName, userPassword);
NotifyUser(userName, userPassword);
}
}
private static async Task<string> EnsureUser(UserManager<IdentityUser> userManager,
string userName, string userPassword)
{
var user = await userManager.FindByNameAsync(userName);
if (user == null)
{
user = new IdentityUser(userName)
{
EmailConfirmed = true
};
await userManager.CreateAsync(user, userPassword);
}
return user.Id;
}
Üretim senaryolarında de benzer bir yaklaşım izlenebilir.
Statik varlıkların yayımlanmasını Engelle Identity
Statik Identity varlıkların Web köküne yayımlanmasını engellemek için bkz IdentityASP.NET Core'a giriş ..
Ek kaynaklar
ASP.NET Core 2,1 ve üzeri ASP.NET Core Identity bir Razor sınıf kitaplığıolarak sunulmaktadır. Dahil edilen uygulamalar, Identity Identity Razor sınıf kitaplığı 'nda (RCL) bulunan kaynak kodu seçmeli olarak eklemek için desteği uygulayabilir. Kodu değiştirebilmeniz ve davranışı değiştirebilmek için kaynak kodu oluşturmak isteyebilirsiniz. Örneğin, kayıt sırasında kullanılan kodu oluşturmak için desteği ' ı söyleyebilirsiniz. Oluşturulan kod RCL 'deki aynı koda göre önceliklidir Identity . Kullanıcı arabirimine tam denetim sağlamak ve varsayılan RCL 'yi kullanmak için, tam KIMLIK UI kaynağı oluşturmabölümüne bakın.
Kimlik doğrulaması içermeyen uygulamalar , RCL paketini eklemek için desteği uygulayabilir Identity . Oluşturulacak kodu seçme seçeneğiniz vardır Identity .
Desteği gerekli kodların çoğunu üretse de, işlemi gerçekleştirmek için projenizi güncelleştirmeniz gerekir. Bu belgede, bir yapı iskelesi güncelleştirmesini tamamlaması için gereken adımlar açıklanmaktadır Identity .
IdentityDesteği çalıştırıldığında, proje dizininde bir ScaffoldingReadme.txt dosyası oluşturulur. ScaffoldingReadme.txt dosyası, yapı iskelesi güncelleştirmesinin tamamlanabilmesi için gerekli olan genel yönergeleri içerir Identity . Bu belge, ScaffoldingReadme.txt dosyasından daha ayrıntılı yönergeler içerir.
Dosya farklılıklarını gösteren ve değişikliklerden geri dönüş yapmanızı sağlayan bir kaynak denetimi sistemi kullanmanızı öneririz. Scaffolder çalıştırıldıktan sonra değişiklikleri inceleyin Identity .
Not
Iki öğeli kimlik doğrulaması, Hesap onaylama ve parola kurtarmaile diğer güvenlik özellikleri kullanılırken hizmetler gereklidir Identity . Hizmetler veya hizmet saplamaları, yapı iskelesi sırasında oluşturulmaz Identity . Bu özelliklerin etkinleştirilmesi için hizmetlerin el ile eklenmesi gerekir. Örneğin, bkz. e-posta onayı gerektir.
IdentityBoş bir projeye yapı iskelesi
IdentityScaffolder 'ı çalıştırın:
- Çözüm Gezgini, projeye sağ tıklayıp > Yeni iskli öğe Ekle >.
- Yeni yapı iskelesi öğesi Ekle iletişim kutusunun sol bölmesinde Ekle ' yi seçin Identity > .
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
~/Pages/Shared/_Layout.cshtmlRazorsayfalar için~/Views/Shared/_Layout.cshtmlMVC projeleri için- Blazor Server Şablondan oluşturulan uygulamalar, Blazor Server
blazorserverRazor Varsayılan olarak sayfalar veya MVC için yapılandırılmamıştır. Düzen sayfası girişini boş bırakın.
- + Yeni bir veri bağlamı sınıfı oluşturmak için düğmeyi seçin. Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
MyApplication.Data.ApplicationDbContext).
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
- Add (Ekle) seçeneğini belirleyin.
Aşağıdaki Vurgulanan çağrıları Startup sınıfına ekleyin:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc();
}
}
UseHsts önerilir, ancak gerekli değildir. Daha fazla bilgi için bkz. http katı aktarım güvenliği Protokolü.
Oluşturulan veritabanı Identity kodu, Geçişler Entity Framework Core gerektirir. Bir geçiş oluşturun ve veritabanını güncelleştirin. Örneğin, aşağıdaki komutları çalıştırın:
Visual Studio Paket Yöneticisi konsolunda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun Identity "Şema Oluştur" ad Add-Migration parametresi rastgeledir. "CreateIdentitySchema" geçişi açıklar.
Identity Razor Var olan yetkilendirme olmadan bir projeye yapı iskelesi yapın
IdentityScaffolder 'ı çalıştırın:
- Çözüm Gezgini, projeye sağ tıklayıp > Yeni iskli öğe Ekle >.
- Yeni yapı iskelesi öğesi Ekle iletişim kutusunun sol bölmesinde Ekle ' yi seçin Identity > .
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
~/Pages/Shared/_Layout.cshtmlRazorsayfalar için~/Views/Shared/_Layout.cshtmlMVC projeleri için- Blazor Server Şablondan oluşturulan uygulamalar, Blazor Server
blazorserverRazor Varsayılan olarak sayfalar veya MVC için yapılandırılmamıştır. Düzen sayfası girişini boş bırakın.
- + Yeni bir veri bağlamı sınıfı oluşturmak için düğmeyi seçin. Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
MyApplication.Data.ApplicationDbContext).
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
- Add (Ekle) seçeneğini belirleyin.
Identity, alanlarda/ Identity / Identity hostingstartup. cs' de yapılandırılır. Daha fazla bilgi için bkz. ıhostingstartup.
Geçişler, UseAuthentication ve düzen
Oluşturulan veritabanı Identity kodu, Geçişler Entity Framework Core gerektirir. Bir geçiş oluşturun ve veritabanını güncelleştirin. Örneğin, aşağıdaki komutları çalıştırın:
Visual Studio Paket Yöneticisi konsolunda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun Identity "Şema Oluştur" ad Add-Migration parametresi rastgeledir. "CreateIdentitySchema" geçişi açıklar.
Kimlik doğrulamayı etkinleştir
Configure Startup Sınıfının yönteminde, UseAuthentication öğesinden sonra çağırın UseStaticFiles :
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc();
}
}
UseHsts önerilir, ancak gerekli değildir. Daha fazla bilgi için bkz. http katı aktarım güvenliği Protokolü.
Düzen değişiklikleri
İsteğe bağlı: () oturum açma bilgilerini _LoginPartial Düzen dosyasına ekleyin:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - RazorNoAuth8</title>
<environment include="Development">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" />
</environment>
<environment exclude="Development">
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
</environment>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a asp-page="/Index" class="navbar-brand">RazorNoAuth8</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a asp-page="/Index">Home</a></li>
<li><a asp-page="/About">About</a></li>
<li><a asp-page="/Contact">Contact</a></li>
</ul>
<partial name="_LoginPartial" />
</div>
</div>
</nav>
<partial name="_CookieConsentPartial" />
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>© 2018 - RazorNoAuth8</p>
</footer>
</div>
<environment include="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
</environment>
<environment exclude="Development">
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.3.1.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
crossorigin="anonymous"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
</script>
<script src="~/js/site.min.js" asp-append-version="true"></script>
</environment>
@RenderSection("Scripts", required: false)
</body>
</html>
Identity Razor Yetkilendirmeyle bir projeye yapı
İskeleyi Identity çalıştırın:
- 'Çözüm Gezgini Yeni İskeleLi Öğe Ekle'> > projesine sağ tıklayın.
- İskele Ekle iletişim kutusunun sol bölmesinde Ekle'yi Identity > seçin.
- Ekle iletişim Identity kutusunda istediğiniz seçenekleri belirleyin.
- Düzen dosyanın üzerine yanlış işaretlemeyle yazılmak için var olan düzen sayfanızı seçin. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
~/Pages/Shared/_Layout.cshtmlMevcut Razor Pages Blazor Server altyapısına sahip Sayfalar veya projeler Razor için~/Views/Shared/_Layout.cshtmlMevcut MVC altyapısına Blazor Server sahip MVC projeleri veya projeleri için
- Düzen dosyanın üzerine yanlış işaretlemeyle yazılmak için var olan düzen sayfanızı seçin. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
- Mevcut veri bağlamınızı kullanmak için geçersiz kılınan en az bir dosya seçin. Veri bağlamınızı eklemek için en az bir dosya seçmeniz gerekir.
- Veri bağlamı sınıfınızı seçin.
- Add (Ekle) seçeneğini belirleyin.
- Yeni bir kullanıcı bağlamı oluşturmak ve büyük olasılıkla için özel bir kullanıcı sınıfı oluşturmak Identity için:
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
MyApplication.Data.ApplicationDbContext). - Add (Ekle) seçeneğini belirleyin.
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
Not: Yeni bir kullanıcı bağlamı oluşturuyorsanız geçersiz kılmak için bir dosya seçmenize gerek yok.
İskeleyi Identity çalıştırın:
- 'Çözüm Gezgini Yeni İskeleLi Öğe Ekle'> > projesine sağ tıklayın.
- İskele Ekle iletişim kutusunun sol bölmesinde Ekle'yi Identity > seçin.
- Ekle iletişim Identity kutusunda istediğiniz seçenekleri belirleyin.
- Mevcut düzen sayfanızı seçin, yoksa düzen dosyanız yanlış işaretlemeyle üzerine yazılır. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
~/Pages/Shared/_Layout.cshtmlSayfalar Razor için~/Views/Shared/_Layout.cshtmlMVC projeleri için
- Mevcut düzen sayfanızı seçin, yoksa düzen dosyanız yanlış işaretlemeyle üzerine yazılır. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
- Mevcut veri bağlamınızı kullanmak için geçersiz kılınan en az bir dosya seçin. Veri bağlamınızı eklemek için en az bir dosya seçmeniz gerekir.
- Veri bağlamı sınıfınızı seçin.
- Add (Ekle) seçeneğini belirleyin.
- Yeni bir kullanıcı bağlamı oluşturmak ve büyük olasılıkla için özel bir kullanıcı sınıfı oluşturmak Identity için:
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
MyApplication.Data.ApplicationDbContext). - Add (Ekle) seçeneğini belirleyin.
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
Not: Yeni bir kullanıcı bağlamı oluşturuyorsanız geçersiz kılmak için bir dosya seçmenize gerek yok.
Bazı Identity Seçenekler, alanlarda/ Identity / Identity hostingstartup. cs' de yapılandırılır. Daha fazla bilgi için bkz. ıhostingstartup.
IdentityVar olan yetkilendirme olmadan BIR MVC projesinde yapı iskelesi yapın
IdentityScaffolder 'ı çalıştırın:
- Çözüm Gezgini, projeye sağ tıklayıp > Yeni iskli öğe Ekle >.
- Yeni yapı iskelesi öğesi Ekle iletişim kutusunun sol bölmesinde Ekle ' yi seçin Identity > .
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
~/Pages/Shared/_Layout.cshtmlRazorsayfalar için~/Views/Shared/_Layout.cshtmlMVC projeleri için- Blazor Server Şablondan oluşturulan uygulamalar, Blazor Server
blazorserverRazor Varsayılan olarak sayfalar veya MVC için yapılandırılmamıştır. Düzen sayfası girişini boş bırakın.
- + Yeni bir veri bağlamı sınıfı oluşturmak için düğmeyi seçin. Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
MyApplication.Data.ApplicationDbContext).
- Var olan düzen sayfanızı seçin veya Düzen dosyanızın üzerine yanlış biçimlendirme uygulanır:
- Add (Ekle) seçeneğini belirleyin.
İsteğe bağlı: bir Login ( _LoginPartial ) öğesini views/Shared/_Layout. cshtml dosyasına ekleyin:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - MvcNoAuth3</title>
<environment include="Development">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" />
</environment>
<environment exclude="Development">
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
</environment>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">MvcNoAuth3</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
<li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li>
<li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li>
</ul>
<partial name="_LoginPartial" />
</div>
</div>
</nav>
<partial name="_CookieConsentPartial" />
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>© 2018 - MvcNoAuth3</p>
</footer>
</div>
<environment include="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
</environment>
<environment exclude="Development">
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.3.1.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
crossorigin="anonymous"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
</script>
<script src="~/js/site.min.js" asp-append-version="true"></script>
</environment>
@RenderSection("Scripts", required: false)
</body>
</html>
- Pages/Shared/_LoginPartial. cshtml dosyasını views/Shared/_LoginPartial. cshtml olarak taşıyın
Identity, alanlarda/ Identity / Identity hostingstartup. cs' de yapılandırılır. Daha fazla bilgi için bkz. ıhostingstartup.
Oluşturulan veritabanı Identity kodu, Geçişler Entity Framework Core gerektirir. Bir geçiş oluşturun ve veritabanını güncelleştirin. Örneğin, aşağıdaki komutları çalıştırın:
Visual Studio Paket Yöneticisi konsolunda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun Identity "Şema Oluştur" ad Add-Migration parametresi rastgeledir. "CreateIdentitySchema" geçişi açıklar.
UseAuthenticationSonra çağır UseStaticFiles :
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvcWithDefaultRoute();
}
}
UseHsts önerilir, ancak gerekli değildir. Daha fazla bilgi için bkz. http katı aktarım güvenliği Protokolü.
IdentityYetkilendirme ile BIR MVC projesinde yapı iskelesi oluşturma
İskeleyi Identity çalıştırın:
- 'Çözüm Gezgini Yeni İskeleLi Öğe Ekle'> > projesine sağ tıklayın.
- İskele Ekle iletişim kutusunun sol bölmesinde Ekle'yi Identity > seçin.
- Ekle iletişim Identity kutusunda istediğiniz seçenekleri belirleyin.
- Düzen dosyanın üzerine yanlış işaretlemeyle yazılmak için var olan düzen sayfanızı seçin. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
~/Pages/Shared/_Layout.cshtmlMevcut Razor Pages Blazor Server altyapısına sahip Sayfalar veya projeler Razor için~/Views/Shared/_Layout.cshtmlMevcut MVC altyapısına Blazor Server sahip MVC projeleri veya projeleri için
- Düzen dosyanın üzerine yanlış işaretlemeyle yazılmak için var olan düzen sayfanızı seçin. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
- Mevcut veri bağlamınızı kullanmak için geçersiz kılınan en az bir dosya seçin. Veri bağlamınızı eklemek için en az bir dosya seçmeniz gerekir.
- Veri bağlamı sınıfınızı seçin.
- Add (Ekle) seçeneğini belirleyin.
- Yeni bir kullanıcı bağlamı oluşturmak ve büyük olasılıkla için özel bir kullanıcı sınıfı oluşturmak Identity için:
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
MyApplication.Data.ApplicationDbContext). - Add (Ekle) seçeneğini belirleyin.
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
Not: Yeni bir kullanıcı bağlamı oluşturuyorsanız geçersiz kılmak için bir dosya seçmenize gerek yok.
İskeleyi Identity çalıştırın:
- 'Çözüm Gezgini Yeni İskeleLi Öğe Ekle'> > projesine sağ tıklayın.
- İskele Ekle iletişim kutusunun sol bölmesinde Ekle'yi Identity > seçin.
- Ekle iletişim Identity kutusunda istediğiniz seçenekleri belirleyin.
- Mevcut düzen sayfanızı seçin, yoksa düzen dosyanız yanlış işaretlemeyle üzerine yazılır. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
~/Pages/Shared/_Layout.cshtmlSayfalar Razor için~/Views/Shared/_Layout.cshtmlMVC projeleri için
- Mevcut düzen sayfanızı seçin, yoksa düzen dosyanız yanlış işaretlemeyle üzerine yazılır. Mevcut bir _ Layout.cshtml dosyası seçildiğinde dosyanın üzerine yazılmaz. Örnek:
- Mevcut veri bağlamınızı kullanmak için geçersiz kılınan en az bir dosya seçin. Veri bağlamınızı eklemek için en az bir dosya seçmeniz gerekir.
- Veri bağlamı sınıfınızı seçin.
- Add (Ekle) seçeneğini belirleyin.
- Yeni bir kullanıcı bağlamı oluşturmak ve büyük olasılıkla için özel bir kullanıcı sınıfı oluşturmak Identity için:
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
MyApplication.Data.ApplicationDbContext). - Add (Ekle) seçeneğini belirleyin.
- Yeni bir + Veri bağlamı sınıfı oluşturmak için düğmesini seçin. Varsayılan değeri kabul etme veya bir sınıf belirtme (örneğin,
Not: Yeni bir kullanıcı bağlamı oluşturuyorsanız geçersiz kılmak için bir dosya seçmenize gerek yok.
Sayfaları/paylaşılan klasörünü ve bu klasördeki dosyaları silin.
Tam Identity UI kaynağı oluştur
Kullanıcı arabiriminin tam denetimini sürdürmek için Identity , Identity desteği ' ı çalıştırın ve tüm dosyaları geçersiz kıl' ı seçin.
aşağıdaki vurgulanan kod, varsayılan Identity kullanıcı arabirimini Identity ASP.NET Core 2,1 web uygulamasında değiştirecek değişiklikleri gösterir. Bunu, Kullanıcı arabirimine tam denetim sağlamak için yapmak isteyebilirsiniz Identity .
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<IdentityUser, IdentityRole>()
// services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
});
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = $"/Identity/Account/Login";
options.LogoutPath = $"/Identity/Account/Logout";
options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});
// using Microsoft.AspNetCore.Identity.UI.Services;
services.AddSingleton<IEmailSender, EmailSender>();
}
Varsayılan değer Identity aşağıdaki kodda değiştirilmiştir:
services.AddIdentity<IdentityUser, IdentityRole>()
// services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
Aşağıdaki kod, Loginpath, Logoutpathve AccessDeniedPathöğesini ayarlar:
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = $"/Identity/Account/Login";
options.LogoutPath = $"/Identity/Account/Logout";
options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});
Bir IEmailSender uygulamayı kaydedin, örneğin:
// using Microsoft.AspNetCore.Identity.UI.Services;
services.AddSingleton<IEmailSender, EmailSender>();
public class EmailSender : IEmailSender
{
public Task SendEmailAsync(string email, string subject, string message)
{
return Task.CompletedTask;
}
}
Parola Yapılandırması
' PasswordOptions De yapılandırılmışsa Startup.ConfigureServices , [StringLength] Password Yapı iskelesi sayfalarında özelliği için öznitelik yapılandırması gerekli olabilir Identity . InputModel``Passwordaşağıdaki dosyalarda özellikler bulunur:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/Identity/Pages/Account/ResetPassword.cshtml.cs
Kayıt sayfasını devre dışı bırak
Kullanıcı kaydını devre dışı bırakmak için:
Yapı iskelesi Identity . Account. Register, Account. Login ve account. RegisterConfirmation bilgilerini ekleyin. Örnek:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"Kullanıcıları bu uç noktadan kaydedememesi için alanı/ Identity /Pages/Account/Register.cshtml.cs güncelleştir:
public class RegisterModel : PageModel { public IActionResult OnGet() { return RedirectToPage("Login"); } public IActionResult OnPost() { return RedirectToPage("Login"); } }Önceki değişikliklerle tutarlı olması için Areas/ Identity /Pages/Account/Register.exe öğesini güncelleştirin:
@page @model RegisterModel @{ ViewData["Title"] = "Go to Login"; } <h1>@ViewData["Title"]</h1> <li class="nav-item"> <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a> </li>/ Identity /Pages/Account/Login.exe içindeki kayıt bağlantısını açıklama veya Kaldır
@*
<p>
<a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
</p>
*@
Areas/ Identity /Pages/Account/registerconfirmation sayfasını güncelleştirin.
- Cshtml dosyasındaki kodu ve bağlantıları kaldırın.
- Onay kodunu şuradan kaldırın
PageModel:
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Kullanıcıları eklemek için başka bir uygulama kullanma
Web uygulaması dışındaki kullanıcıları eklemek için bir mekanizma sağlar. Kullanıcı ekleme seçenekleri şunlardır:
- Adanmış bir yönetim Web uygulaması.
- Konsol uygulaması.
Aşağıdaki kod, kullanıcı eklemeye bir yaklaşımı özetler:
- Kullanıcıların listesi belleğe okunur.
- Her kullanıcı için güçlü bir benzersiz parola oluşturulur.
- Kullanıcı veritabanına Identity eklenir.
- Kullanıcıya bildirilecek ve parolayı değiştirmesi bildirilecek.
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<AppDbCntx>();
context.Database.Migrate();
var config = host.Services.GetRequiredService<IConfiguration>();
var userList = config.GetSection("userList").Get<List<string>>();
SeedData.Initialize(services, userList).Wait();
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred adding users.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Aşağıdaki kod, kullanıcı eklemeyi özetler:
public static async Task Initialize(IServiceProvider serviceProvider,
List<string> userList)
{
var userManager = serviceProvider.GetService<UserManager<IdentityUser>>();
foreach (var userName in userList)
{
var userPassword = GenerateSecurePassword();
var userId = await EnsureUser(userManager, userName, userPassword);
NotifyUser(userName, userPassword);
}
}
private static async Task<string> EnsureUser(UserManager<IdentityUser> userManager,
string userName, string userPassword)
{
var user = await userManager.FindByNameAsync(userName);
if (user == null)
{
user = new IdentityUser(userName)
{
EmailConfirmed = true
};
await userManager.CreateAsync(user, userPassword);
}
return user.Id;
}
Üretim senaryolarında da benzer bir yaklaşım benimser.