ASP.NET Core projelerinde iskele Identity
Gönderen Rick Anderson
ASP.NET Core, Sınıf Kitaplığı olarak ASP.NET Core Identity sağlar.Razor İçeren Identity uygulamalar, Sınıf Kitaplığı'nda (RCL) bulunan kaynak kodunu seçmeli olarak eklemek için iskeleyi IdentityRazor uygulayabilir. Kodu değiştirmek ve davranışı değiştirmek için kaynak kodu oluşturmak isteyebilirsiniz. Örneğin, yapı iskelesine kayıtta kullanılan kodu oluşturmasını söyleyebilirsiniz. Oluşturulan kod, RCL'deki aynı koddan Identity önceliklidir. Kullanıcı arabiriminin tam denetimini elde etmek ve varsayılan RCL'yi kullanmamak için Tam Identity kullanıcı arabirimi kaynağı oluşturma bölümüne bakın.
Kimlik doğrulaması içermeyen uygulamalar RCL Identity paketini eklemek için iskeleyi uygulayabilir. Oluşturulacak kodu seçme Identity seçeneğiniz vardır.
yapı iskelesi gerekli kodun çoğunu oluştursa da, işlemi tamamlamak için projenizi güncelleştirmeniz gerekir. Bu belgede bir Identity iskele güncelleştirmesini tamamlamak için gereken adımlar açıklanmaktadır.
Dosya farklarını gösteren ve değişiklikleri geri almanızı sağlayan bir kaynak denetim sistemi kullanmanızı öneririz. yapı iskelesini çalıştırdıktan Identity sonra değişiklikleri inceleyin.
İki Faktörlü Kimlik Doğrulaması, Hesap onayı ve parola kurtarma ve ile Identitydiğer güvenlik özellikleri kullanılırken hizmetler gereklidir. yapı iskelesi Identityoluşturulurken hizmetler veya hizmet saptamaları oluşturulmaz. Bu özellikleri etkinleştirmek için hizmetlerin el ile eklenmesi gerekir. Örneğin, bkz . E-posta Onayı Gerektir.
Genellikle, tek tek hesaplarla oluşturulan uygulamalar yeni bir veri bağlamı oluşturmamalıdır.
Mevcut yetkilendirme olmadan bir Razor projeye iskele Identity oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Dekont
.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
Geçişler, UseAuthentication ve düzen
Oluşturulan Identity veritabanı kodu, Entity Framework Core Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, 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 Konsolu'nda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun "Şema OluşturIdentity" ad parametresi Add-Migration
rastgeledir. "CreateIdentitySchema"
geçişi açıklar.
Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Update-Database
Update-Database
Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied
" sütunu içerir.
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context
belirtin.
Düzen değişiklikleri
İsteğe bağlı: Oturum açma kısmi (_LoginPartial
) öğesini 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"] - WebRPnoAuth2Auth</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</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">WebRPnoAuth2Auth</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-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 justify-content-between">
<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>
<partial name="_LoginPartial" />
</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">
© 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Yetkilendirmeli bir Razor projeye iskele Identity oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Dekont
.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
Mevcut yetkilendirme olmadan bir MVC projesine iskele Identity oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Dekont
.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
İsteğe bağlı: Oturum açma kısmi (_LoginPartial
) öğesini dosyaya Views/Shared/_Layout.cshtml
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"] - WebRPnoAuth2Auth</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</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">WebRPnoAuth2Auth</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-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 justify-content-between">
<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>
<partial name="_LoginPartial" />
</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">
© 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Oluşturulan Identity veritabanı kodu, Entity Framework Core Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, 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 Konsolu'nda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun "Şema OluşturIdentity" ad parametresi Add-Migration
rastgeledir. "CreateIdentitySchema"
geçişi açıklar.
Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Update-Database
Update-Database
Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied
" sütunu içerir.
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context
belirtin.
Aşağıdaki vurgulanmış kodda gösterildiği gibi öğesini Program.cs
ekleyinMapRazorPages
:
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebMVCauth.Data;
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Yetkilendirmeli bir MVC projesine iskele Identity oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Dekont
.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
İstemci tarafı Blazor uygulamaları
İstemci tarafı Blazor uygulamaları kendi Identity kullanıcı arabirimi yaklaşımlarını kullanır ve ASP.NET Core Identity iskelesini kullanamaz.
Sunucu tarafı ASP.NET Core uygulamaları bu makaledeki Razor Pages/MVC yönergelerini izleyebilir ve destekleyen Identitydiğer ASP.NET Core uygulamaları gibi yapılandırılır. Çerçeve, Blazor web Blazor uygulamasına yapı iskelesi Identity oluştururken kullanıcı arabirimi sayfalarının Identity () bileşen sürümlerini.razor
(.cshtml
) kullanırRazor.
Daha fazla bilgi için Güvenlik ve makalelere Blazor bakın.Identity
Tam Identity kullanıcı arabirimi kaynağı oluşturma
Kullanıcı arabiriminin Identity tam denetimini korumak için iskeleyi Identity çalıştırın ve Tüm dosyaları geçersiz kıl'ı seçin.
Parola yapılandırması
içinde Startup.ConfigureServices
yapılandırıldıysaPasswordOptions,[StringLength]
yapı iskelesi sayfalarındaki Identity özellik için Password
öznitelik yapılandırması gerekebilir. InputModel
Password
özellikleri aşağıdaki dosyalarda bulunur:
Areas/Identity/Pages/Account/Register.cshtml.cs
Areas/Identity/Pages/Account/ResetPassword.cshtml.cs
Sayfayı devre dışı bırakma
Bu bölümde yazmaç sayfasının nasıl devre dışı bırakılacağı gösterilmektedir, ancak herhangi bir sayfayı devre dışı bırakmak için bu 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. Örneğin:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
Kullanıcıların bu uç noktadan kaydolmaması için güncelleştirin
Areas/Identity/Pages/Account/Register.cshtml.cs
:public class RegisterModel : PageModel { public IActionResult OnGet() { return RedirectToPage("Login"); } public IActionResult OnPost() { return RedirectToPage("Login"); } }
Önceki değişikliklerle tutarlı olacak şekilde güncelleştirin
Areas/Identity/Pages/Account/Register.cshtml
:@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>
Kayıt bağlantısını açıklama satırı veya kaldırma
Areas/Identity/Pages/Account/Login.cshtml
@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@
Alanlar//Sayfalar/IdentityHesap/RegisterConfirmation sayfasını güncelleştirin.
- Cshtml dosyasından kodu ve bağlantıları kaldırın.
- onay kodunu içinden
PageModel
kaldırın:
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Kullanıcı eklemek için başka bir uygulama kullanma
Web uygulamasının dışına kullanıcı eklemek için bir mekanizma sağlayın. Kullanıcı ekleme seçenekleri şunlardır:
- Ayrılmış bir yönetici web uygulaması.
- Konsol uygulaması.
Aşağıdaki kodda kullanıcı eklemeye yönelik bir yaklaşım özetlenmiştir:
- Kullanıcıların listesi belleğe okunur.
- Her kullanıcı için güçlü bir benzersiz parola oluşturulur.
- Kullanıcı veritabanına eklenir Identity .
- Kullanıcıya bildirim gönderilir 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, 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ı için de benzer bir yaklaşım izlenebilir.
Statik Identity varlıkların yayımlanmasını engelleme
Statik Identity varlıkların web kökünde yayımlanmasını önlemek için bkz. ASP.NET Core'da Identitygiriş.
ASP.NET Core, Sınıf Kitaplığı olarak ASP.NET Core Identity sağlar.Razor İçeren Identity uygulamalar, Sınıf Kitaplığı'nda (RCL) bulunan kaynak kodunu seçmeli olarak eklemek için iskeleyi IdentityRazor uygulayabilir. Kodu değiştirmek ve davranışı değiştirmek için kaynak kodu oluşturmak isteyebilirsiniz. Örneğin, yapı iskelesine kayıtta kullanılan kodu oluşturmasını söyleyebilirsiniz. Oluşturulan kod, RCL'deki aynı koddan Identity önceliklidir. Kullanıcı arabiriminin tam denetimini elde etmek ve varsayılan RCL'yi kullanmamak için Tam Identity kullanıcı arabirimi kaynağı oluşturma bölümüne bakın.
Kimlik doğrulaması içermeyen uygulamalar RCL Identity paketini eklemek için iskeleyi uygulayabilir. Oluşturulacak kodu seçme Identity seçeneğiniz vardır.
yapı iskelesi gerekli kodun çoğunu oluştursa da, işlemi tamamlamak için projenizi güncelleştirmeniz gerekir. Bu belgede bir Identity iskele güncelleştirmesini tamamlamak için gereken adımlar açıklanmaktadır.
Dosya farklarını gösteren ve değişiklikleri geri almanızı sağlayan bir kaynak denetim sistemi kullanmanızı öneririz. yapı iskelesini çalıştırdıktan Identity sonra değişiklikleri inceleyin.
İki Faktörlü Kimlik Doğrulaması, Hesap onayı ve parola kurtarma ve ile Identitydiğer güvenlik özellikleri kullanılırken hizmetler gereklidir. yapı iskelesi Identityoluşturulurken hizmetler veya hizmet saptamaları oluşturulmaz. Bu özellikleri etkinleştirmek için hizmetlerin el ile eklenmesi gerekir. Örneğin, bkz . E-posta Onayı Gerektir.
Genellikle, tek tek hesaplarla oluşturulan uygulamalar yeni bir veri bağlamı oluşturmamalıdır.
Mevcut yetkilendirme olmadan bir Razor projeye iskele Identity oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Dekont
.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
Geçişler, UseAuthentication ve düzen
Oluşturulan Identity veritabanı kodu, Entity Framework Core Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, 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 Konsolu'nda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun "Şema OluşturIdentity" ad parametresi Add-Migration
rastgeledir. "CreateIdentitySchema"
geçişi açıklar.
Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Update-Database
Update-Database
Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied
" sütunu içerir.
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context
belirtin.
Düzen değişiklikleri
İsteğe bağlı: Oturum açma kısmi (_LoginPartial
) öğesini 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"] - WebRPnoAuth2Auth</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</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">WebRPnoAuth2Auth</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-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 justify-content-between">
<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>
<partial name="_LoginPartial" />
</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">
© 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Yetkilendirmeli bir Razor projeye iskele Identity oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Dekont
.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
Mevcut yetkilendirme olmadan bir MVC projesine iskele Identity oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Dekont
.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
İsteğe bağlı: Oturum açma kısmi (_LoginPartial
) öğesini dosyaya Views/Shared/_Layout.cshtml
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"] - WebRPnoAuth2Auth</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/WebRPnoAuth2Auth.styles.css" asp-append-version="true" />
</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">WebRPnoAuth2Auth</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-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 justify-content-between">
<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>
<partial name="_LoginPartial" />
</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">
© 2021 - WebRPnoAuth2Auth - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Oluşturulan Identity veritabanı kodu, Entity Framework Core Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, 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 Konsolu'nda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun "Şema OluşturIdentity" ad parametresi Add-Migration
rastgeledir. "CreateIdentitySchema"
geçişi açıklar.
Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Update-Database
Update-Database
Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied
" sütunu içerir.
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context
belirtin.
Aşağıdaki vurgulanmış kodda gösterildiği gibi öğesini Program.cs
ekleyinMapRazorPages
:
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebMVCauth.Data;
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Yetkilendirmeli bir MVC projesine iskele Identity oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Dekont
.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
Yetkilendirme ile sunucu tarafı Blazor bir uygulamaya iskele Identity oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Dekont
.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
Geçişler
Oluşturulan Identity veritabanı kodu, Entity Framework Core Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, 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 Konsolu'nda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun "Şema OluşturIdentity" ad parametresi Add-Migration
rastgeledir. "CreateIdentitySchema"
geçişi açıklar.
Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Update-Database
Update-Database
Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied
" sütunu içerir.
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context
belirtin.
Stil kimlik doğrulama uç noktaları
Sunucu tarafı Blazor uygulamalar Sayfalar Identity sayfalarını kullandığındanRazor, bir ziyaretçi sayfalar ve bileşenler arasında Identity gezindiğinde kullanıcı arabiriminin stili değişir. Uyumsuz stilleri ele almak için iki seçeneğiniz vardır:
Özel Identity bileşenler
ASP.NET Core Identity , uygulamalarda birincil istemci-sunucu iletişim modeli Blazor olmayan HTTP isteği ve yanıt iletişimi bağlamında çalışacak şekilde tasarlanmıştır. Kullanıcı yönetimi için ASP.NET Core Identity kullanan ASP.NET Core uygulamaları, kullanıcı kaydı, oturum açma, oturumu kapatma ve diğer kullanıcı yönetimi görevleri gibi Identity ile ilgili kullanıcı arabirimi Razor bileşenleri yerine Razor Pages kullanmalıdır.
SignInManager<TUser> Bileşenlerde Razor desteklenmediğinden ve UserManager<TUser> desteklenmediğinden, sunucu tarafı Identityetkinleştirilmiş bir ASP.NET Core uygulaması aracılığıyla bileşenlerden Razor eylemleri yönetmek Identity için web API'sini kullanmanızı öneririz. Uygulamalar için web API'leri oluşturma yönergeleri için Blazor bkz . ASP.NET Core Blazor uygulamasından web API'sini çağırma.
Sayfalar yerine Razor bileşenleri Identity kullanma Razor yaklaşımı kendi özelRazorIdentitybileşenlerinizi oluşturmaktır, ancak Microsoft bu yaklaşımı önermez veya desteklemez. Ek bağlam için aşağıdaki tartışmaları inceleyin. Aşağıdaki tartışmalarda, Microsoft dışı GitHub depolarında sorun açıklamalarındaki kod örnekleri ve çapraz bağlantılı kod örnekleri Microsoft tarafından desteklenmez, ancak bazı geliştiriciler için yararlı olabilir:
- Kullanırken Identity Özel Oturum Açma Bileşenini Destekleme (dotnet/aspnetcore #13601)
- Bileşenler'de Razor desteklenmeyen
SigninManager<T>
yineleme (dotnet/aspnetcore #34095) - Sunucu tarafı blazor için özel oturum açma formunun nasıl uygulanacağı hakkında bilgi yoktur (dotnet/AspNetCore.Docs #16813)
Özel IdentityRazor bileşenler oluşturmaya çalışırken veya üçüncü taraf Razor bileşenleri ararken ek yardım için aşağıdaki kaynakları öneririz:
- Stack Overflow (etiket:
blazor
) (Genel destek forumu) - ASP.NET Core Slack Ekibi (Genel destek sohbeti)
- Blazor Gitter (Genel destek sohbeti)
- Awesome Blazor (Topluluk tarafından korunan kaynaklara bağlantılar Blazor )
Uygulama stilleriyle Blazor özel düzen kullanma
Sayfa Identity düzeni ve stilleri, varsayılan Blazor temaya benzer stiller kullanan sayfalar üretmek için değiştirilebilir. Bu yaklaşım belgelerde ele alınmıyor.
İstemci tarafı Blazor uygulamaları
İstemci tarafı Blazor uygulamaları kendi Identity kullanıcı arabirimi yaklaşımlarını kullanır ve ASP.NET Core Identity iskelesini kullanamaz. Sunucu tarafı ASP.NET Barındırılan Blazor çözümlerin Çekirdek uygulamaları bu makaledeki Razor Sayfalar/MVC yönergelerini izleyebilir ve destekleyen Identitydiğer ASP.NET Core uygulamaları gibi yapılandırılır.
Çerçeve, Blazor kullanıcı arabirimi sayfalarının Identity bileşen sürümlerini içermezRazor. Identity Kullanıcı arabirimi Razor bileşenleri özel olarak oluşturulabilir veya desteklenmeyen üçüncü taraf kaynaklardan alınabilir.
Daha fazla bilgi için Güvenlik ve makalelere Blazor bakın.Identity
Tam Identity kullanıcı arabirimi kaynağı oluşturma
Kullanıcı arabiriminin Identity tam denetimini korumak için iskeleyi Identity çalıştırın ve Tüm dosyaları geçersiz kıl'ı seçin.
Parola yapılandırması
içinde Startup.ConfigureServices
yapılandırıldıysaPasswordOptions,[StringLength]
yapı iskelesi sayfalarındaki Identity özellik için Password
öznitelik yapılandırması gerekebilir. InputModel
Password
özellikleri aşağıdaki dosyalarda bulunur:
Areas/Identity/Pages/Account/Register.cshtml.cs
Areas/Identity/Pages/Account/ResetPassword.cshtml.cs
Sayfayı devre dışı bırakma
Bu bölümde yazmaç sayfasının nasıl devre dışı bırakılacağı gösterilmektedir, ancak herhangi bir sayfayı devre dışı bırakmak için bu 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. Örneğin:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
Kullanıcıların bu uç noktadan kaydolmaması için güncelleştirin
Areas/Identity/Pages/Account/Register.cshtml.cs
:public class RegisterModel : PageModel { public IActionResult OnGet() { return RedirectToPage("Login"); } public IActionResult OnPost() { return RedirectToPage("Login"); } }
Önceki değişikliklerle tutarlı olacak şekilde güncelleştirin
Areas/Identity/Pages/Account/Register.cshtml
:@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>
Kayıt bağlantısını açıklama satırı veya kaldırma
Areas/Identity/Pages/Account/Login.cshtml
@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@
Alanlar//Sayfalar/IdentityHesap/RegisterConfirmation sayfasını güncelleştirin.
- Cshtml dosyasından kodu ve bağlantıları kaldırın.
- onay kodunu içinden
PageModel
kaldırın:
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Kullanıcı eklemek için başka bir uygulama kullanma
Web uygulamasının dışına kullanıcı eklemek için bir mekanizma sağlayın. Kullanıcı ekleme seçenekleri şunlardır:
- Ayrılmış bir yönetici web uygulaması.
- Konsol uygulaması.
Aşağıdaki kodda kullanıcı eklemeye yönelik bir yaklaşım özetlenmiştir:
- Kullanıcıların listesi belleğe okunur.
- Her kullanıcı için güçlü bir benzersiz parola oluşturulur.
- Kullanıcı veritabanına eklenir Identity .
- Kullanıcıya bildirim gönderilir 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, 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ı için de benzer bir yaklaşım izlenebilir.
Statik Identity varlıkların yayımlanmasını engelleme
Statik Identity varlıkların web kökünde yayımlanmasını önlemek için bkz. ASP.NET Core'da Identitygiriş.
ASP.NET Core, Sınıf Kitaplığı olarak ASP.NET Core Identity sağlar.Razor İçeren Identity uygulamalar, Sınıf Kitaplığı'nda (RCL) bulunan kaynak kodunu seçmeli olarak eklemek için iskeleyi IdentityRazor uygulayabilir. Kodu değiştirmek ve davranışı değiştirmek için kaynak kodu oluşturmak isteyebilirsiniz. Örneğin, yapı iskelesine kayıtta kullanılan kodu oluşturmasını söyleyebilirsiniz. Oluşturulan kod, RCL'deki aynı koddan Identity önceliklidir. Kullanıcı arabiriminin tam denetimini elde etmek ve varsayılan RCL'yi kullanmamak için Tam Identity kullanıcı arabirimi kaynağı oluşturma bölümüne bakın.
Kimlik doğrulaması içermeyen uygulamalar RCL Identity paketini eklemek için iskeleyi uygulayabilir. Oluşturulacak kodu seçme Identity seçeneğiniz vardır.
yapı iskelesi gerekli kodun çoğunu oluştursa da, işlemi tamamlamak için projenizi güncelleştirmeniz gerekir. Bu belgede bir Identity iskele güncelleştirmesini tamamlamak için gereken adımlar açıklanmaktadır.
Dosya farklarını gösteren ve değişiklikleri geri almanızı sağlayan bir kaynak denetim sistemi kullanmanızı öneririz. yapı iskelesini çalıştırdıktan Identity sonra değişiklikleri inceleyin.
İki Faktörlü Kimlik Doğrulaması, Hesap onayı ve parola kurtarma ve ile Identitydiğer güvenlik özellikleri kullanılırken hizmetler gereklidir. yapı iskelesi Identityoluşturulurken hizmetler veya hizmet saptamaları oluşturulmaz. Bu özellikleri etkinleştirmek için hizmetlerin el ile eklenmesi gerekir. Örneğin, bkz . E-posta Onayı Gerektir.
Mevcut tek tek hesapları olan bir projeye yeni bir veri bağlamı ile iskele oluştururken Identity :
- içinde
Startup.ConfigureServices
, şu çağrıları kaldırın:AddDbContext
AddDefaultIdentity
Örneğin, AddDbContext
ve AddDefaultIdentity
aşağıdaki kodda açıklama satırı oluşturulur:
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, içinde yinelenen kodu açıklama olarak gösterir Areas/Identity/IdentityHostingStartup.cs
Genellikle, tek tek hesaplarla oluşturulan uygulamalar yeni bir veri bağlamı oluşturmamalıdır.
Boş bir projeye iskele Identity oluşturma
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
sınıfını Startup
aşağıdakine benzer bir 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 Identity veritabanı kodu, Entity Framework Core Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, 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 Konsolu'nda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun "Şema OluşturIdentity" ad parametresi Add-Migration
rastgeledir. "CreateIdentitySchema"
geçişi açıklar.
Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Update-Database
Update-Database
Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied
" sütunu içerir.
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context
belirtin.
Mevcut yetkilendirme olmadan bir Razor projeye iskele Identity oluşturma
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
Identity içinde Areas/Identity/IdentityHostingStartup.cs
yapılandırılır. Daha fazla bilgi için bkz . IHostingStartup.
Geçişler, UseAuthentication ve düzen
Oluşturulan Identity veritabanı kodu, Entity Framework Core Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, 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 Konsolu'nda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun "Şema OluşturIdentity" ad parametresi Add-Migration
rastgeledir. "CreateIdentitySchema"
geçişi açıklar.
Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Update-Database
Update-Database
Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied
" sütunu içerir.
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context
belirtin.
Kimlik doğrulamayı etkinleştir
sınıfını Startup
aşağıdakine benzer bir 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 kısmi (_LoginPartial
) öğesini 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.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.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@RenderSection("Scripts", required: false)
</body>
</html>
Yetkilendirmeli bir Razor projeye iskele Identity oluşturma
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
Bazı Identity seçenekler içinde Areas/Identity/IdentityHostingStartup.cs
yapılandırılır. Daha fazla bilgi için bkz . IHostingStartup.
Mevcut yetkilendirme olmadan bir MVC projesine iskele Identity oluşturma
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
İsteğe bağlı: Oturum açma kısmi (_LoginPartial
) öğesini dosyaya Views/Shared/_Layout.cshtml
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.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.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@RenderSection("Scripts", required: false)
</body>
</html>
- Dosyayı şuraya taşı:
Pages/Shared/_LoginPartial.cshtml
Views/Shared/_LoginPartial.cshtml
Identity içinde Areas/Identity/IdentityHostingStartup.cs
yapılandırılır. Daha fazla bilgi için bkz. IHostingStartup.
Oluşturulan Identity veritabanı kodu, Entity Framework Core Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, 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 Konsolu'nda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun "Şema OluşturIdentity" ad parametresi Add-Migration
rastgeledir. "CreateIdentitySchema"
geçişi açıklar.
Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Update-Database
Update-Database
Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied
" sütunu içerir.
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context
belirtin.
sınıfını Startup
aşağıdakine benzer bir 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ü.
Yetkilendirmeli bir MVC projesine iskele Identity oluşturma
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
Mevcut yetkilendirme olmadan bir sunucu tarafı Blazor uygulamasına iskele Identity oluşturma
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
Identity içinde Areas/Identity/IdentityHostingStartup.cs
yapılandırılır. Daha fazla bilgi için bkz. IHostingStartup
.
Geçişler
Oluşturulan Identity veritabanı kodu, Entity Framework Core Geçişleri gerektirir. Şemayı oluşturmak Identity için bir geçiş oluşturulmadıysa ve veritabanına uygulanmadıysa, 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 Konsolu'nda:
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Add-Migration CreateIdentitySchema
Update-Database
Komutun "Şema OluşturIdentity" ad parametresi Add-Migration
rastgeledir. "CreateIdentitySchema"
geçişi açıklar.
Identity Şema önceden oluşturulduysa ancak veritabanına uygulanmadıysa, yalnızca veritabanını güncelleştirme komutu yürütülmelidir:
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Update-Database
Update-Database
Aşağıdaki komutla şemanın Identity uygulanmasını onaylayabilirsiniz. Komutun çıktısı, veritabanına hangi geçişlerin uygulandığını gösteren bir "applied
" sütunu içerir.
Visual Studio Paket Yöneticisi Konsolu'nda komutunu yürütür:Get-Migration
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context
belirtin.
Stil kimlik doğrulama uç noktaları
Sunucu tarafı Blazor uygulamalar Sayfalar Identity sayfalarını kullandığındanRazor, bir ziyaretçi sayfalar ve bileşenler arasında Identity gezindiğinde kullanıcı arabiriminin stili değişir. Uyumsuz stilleri ele almak için iki seçeneğiniz vardır:
Özel Identity bileşenler
Sayfalar yerine bileşenlerini Identity kullanma yaklaşımı, bileşenler oluşturmaktır Identity . Bileşenlerde desteklenmediğinden SignInManager
ve UserManager
desteklenmediğinden, kullanıcı hesabı eylemlerini işlemek için uygulamadaki Blazor web API Razor uç noktalarını kullanın.
Uygulama stilleriyle Blazor özel düzen kullanma
Sayfa Identity düzeni ve stilleri, varsayılan Blazor temaya benzer stiller kullanan sayfalar üretmek için değiştirilebilir. Bu yaklaşım belgelerde ele alınmıyor.
Yetkilendirme ile sunucu tarafı Blazor bir uygulamaya iskele Identity oluşturma
İskeleyi Identity çalıştırın:
- Çözüm Gezgini, Projeye >Yeni İskeleli Öğe Ekle'ye>sağ tıklayın.
- Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity. Orta bölmede öğesini seçin Identity . Ekle düğmesini seçin.
- Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin.
- için
_Layout.cshtml
mevcut, özelleştirilmiş bir düzen sayfanız varsa, yapı iskelesi tarafından yanlış işaretlemeyle düzeninizin üzerine yazılmasını önlemek için Identity mevcut düzen sayfanızı seçin. Örneğin, aşağıdakilerden birini seçin:Pages/Shared/_Layout.cshtml
Sayfalar veya Blazor Server mevcut Razor Sayfalar altyapısına sahip projeler içinRazor.Views/Shared/_Layout.cshtml
MVC projeleri veya Blazor Server mevcut MVC altyapısına sahip projeler için.
- Veri bağlamı için (DbContext sınıfı):
- Veri bağlamı sınıfınızı seçin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
- Bir veri bağlamı oluşturmak ve büyük olasılıkla için yeni bir kullanıcı sınıfı oluşturmak için Identitydüğmesini seçin + . Varsayılan değeri kabul edin veya bir sınıf belirtin (örneğin,
Contoso.Data.ApplicationDbContext
"Contoso" adlı bir şirket için). Yeni bir kullanıcı sınıfı oluşturmak için Kullanıcı sınıfı düğmesini seçin + ve sınıfı belirtin (örneğin,ContosoUser
"Contoso" adlı bir şirket için).
- yapı iskelesini çalıştırmak için Ekle düğmesini seçin.
- için
Bazı Identity seçenekler içinde Areas/Identity/IdentityHostingStartup.cs
yapılandırılır. Daha fazla bilgi için bkz . IHostingStartup.
İstemci tarafı Blazor uygulamaları
İstemci tarafı Blazor uygulamaları kendi Identity kullanıcı arabirimi yaklaşımlarını kullanır ve ASP.NET Core Identity iskelesini kullanamaz. Sunucu tarafı ASP.NET Barındırılan Blazor çözümlerin Çekirdek uygulamaları bu makaledeki Razor Sayfalar/MVC yönergelerini izleyebilir ve destekleyen Identitydiğer ASP.NET Core uygulamaları gibi yapılandırılır.
Çerçeve, Blazor kullanıcı arabirimi sayfalarının Identity bileşen sürümlerini içermezRazor. Identity Kullanıcı arabirimi Razor bileşenleri özel olarak oluşturulabilir veya desteklenmeyen üçüncü taraf kaynaklardan alınabilir.
Daha fazla bilgi için Güvenlik ve makalelere Blazor bakın.Identity
Tam Identity kullanıcı arabirimi kaynağı oluşturma
Kullanıcı arabiriminin Identity tam denetimini korumak için iskeleyi Identity çalıştırın ve Tüm dosyaları geçersiz kıl'ı seçin.
Aşağıdaki vurgulanmış kod, ASP.NET Core 2.1 web uygulamasında varsayılan Identity kullanıcı arabirimini ile Identity değiştirme değişikliklerini gösterir. Kullanıcı arabiriminin Identity tam denetimine sahip olmak için bunu yapmak isteyebilirsiniz.
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 Identity değer aşağıdaki kodda değiştirilir:
services.AddIdentity<IdentityUser, IdentityRole>()
// services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
Aşağıdaki kod , LogoutPathve AccessDeniedPathkümelerini LoginPathayarlar:
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ı
içinde Startup.ConfigureServices
yapılandırıldıysaPasswordOptions,[StringLength]
yapı iskelesi sayfalarındaki Identity özellik için Password
öznitelik yapılandırması gerekebilir. InputModel
Password
özellikleri aşağıdaki dosyalarda bulunur:
Areas/Identity/Pages/Account/Register.cshtml.cs
Areas/Identity/Pages/Account/ResetPassword.cshtml.cs
Sayfayı devre dışı bırakma
Bu bölümde yazmaç sayfasının nasıl devre dışı bırakılacağı gösterilmektedir, ancak herhangi bir sayfayı devre dışı bırakmak için bu 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. Örneğin:
dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"
Kullanıcıların bu uç noktadan kaydolmaması için güncelleştirin
Areas/Identity/Pages/Account/Register.cshtml.cs
:public class RegisterModel : PageModel { public IActionResult OnGet() { return RedirectToPage("Login"); } public IActionResult OnPost() { return RedirectToPage("Login"); } }
Önceki değişikliklerle tutarlı olacak şekilde güncelleştirin
Areas/Identity/Pages/Account/Register.cshtml
:@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>
Kayıt bağlantısını açıklama satırı veya kaldırma
Areas/Identity/Pages/Account/Login.cshtml
@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@
Alanlar//Sayfalar/IdentityHesap/RegisterConfirmation sayfasını güncelleştirin.
- Cshtml dosyasından kodu ve bağlantıları kaldırın.
- onay kodunu içinden
PageModel
kaldırın:
[AllowAnonymous] public class RegisterConfirmationModel : PageModel { public IActionResult OnGet() { return Page(); } }
Kullanıcı eklemek için başka bir uygulama kullanma
Web uygulamasının dışına kullanıcı eklemek için bir mekanizma sağlayın. Kullanıcı ekleme seçenekleri şunlardır:
- Ayrılmış bir yönetici web uygulaması.
- Konsol uygulaması.
Aşağıdaki kodda kullanıcı eklemeye yönelik bir yaklaşım özetlenmiştir:
- Kullanıcıların listesi belleğe okunur.
- Her kullanıcı için güçlü bir benzersiz parola oluşturulur.
- Kullanıcı veritabanına eklenir Identity .
- Kullanıcıya bildirim gönderilir 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, 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ı için de benzer bir yaklaşım izlenebilir.
Statik Identity varlıkların yayımlanmasını engelleme
Statik Identity varlıkların web kökünde yayımlanmasını önlemek için bkz. ASP.NET Core'da Identitygiriş.
Ek kaynaklar
ASP.NET Core
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin