Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yazan Rick Anderson
Bu makalede, veritabanını geçirme ve iskele güncelleştirmesini tamamlama Identity adımları gösterilmektedir.
Blazor Identity Iskele
ASP.NET Core Identity kod oluşturma, Identity'lere ve uygulamalarına Blazor Web App ekler. İskele oluşturucu, IdentityRazor bileşenlerini uygulamaya ekledikten sonra, bileşenleri uygulamanızın gereksinimlerine uygun olacak şekilde özelleştirebilirsiniz.
İskele oluşturucu, Identity öğesini uygulamaya eklemek için gerekli C# kodunu oluştursa da, işlemi tamamlamak için proje veritabanını Entity Framework Core veritabanı geçişi kullanarak güncelleştirmeniz gerekir. Bu makalede, veritabanını geçirme adımları açıklanmaktadır.
Identity iskele oluşturucuyu çalıştırdıktan sonra değişiklikleri inceleyin. Değişiklikleri geri döndürme özelliğiyle dosya değişikliklerini gösteren GitHub veya başka bir kaynak denetim sistemi kullanın.
ile iki faktörlü kimlik doğrulama (2FA), Identity ve diğer güvenlik özelliklerini kullanmak için hizmetler gereklidir. Identity iskelet oluşturma sırasında hizmetler veya hizmet taslakları oluşturulmaz. Bu özellikleri etkinleştirmek için hizmetlerin el ile eklenmesi gerekir.
Razor Sayfalar ve MVC Identity iskelesi
ASP.NET Core, ASP.NET Core Identity öğesini bir Razor sınıf kitaplığı (RCL) olarak sağlar. Identity içeren uygulamalar, Identity RCL’sinde bulunan kaynak kodunu seçerek eklemek için iskeleyiciyi kullanabilir. Kodu değiştirmek ve davranışı değiştirmek için kaynak kodu oluşturmak isteyebilirsiniz. Örneğin, iskelet oluşturucuya kayıt işleminde kullanılan kodu oluşturmasını söyleyebilirsiniz. Özelleştirilmiş Identity kod, RCL tarafından Identity sağlanan varsayılan uygulamayı geçersiz kılar. 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 makalede, bir Identity iskele güncelleştirmesini tamamlamak için gereken adımlar gösterilmektedir. Identity iskele oluşturucuyu çalıştırdıktan sonra değişiklikleri inceleyin. Dosya farklarını gösteren ve değişiklikleri geri almanızı sağlayan bir kaynak denetim sistemi kullanın.
2FA, hesap onayı ve parola kurtarma ve ile Identitydiğer güvenlik özellikleri kullanılırken hizmetler gereklidir. Identity iskelet oluşturma sırasında hizmetler veya hizmet taslakları oluşturulmaz. Bu özellikleri etkinleştirmek için hizmetlerin el ile eklenmesi gerekir. Örneğin, bkz. Uygulamanın e-posta onayı gerektirmesi için e-posta sağlayıcısı yapılandırma.
Genellikle, tek tek hesaplarla oluşturulan uygulamalar yeni bir veri bağlamı oluşturmamalıdır.
Bir projede Identity iskeleti Blazor oluşturma
Bu bölümde açıklanan iskelet oluşturma yordamları, Blazor Web App ve Blazor Server uygulamaları için geçerlidir.
Identity iskelet oluşturucuyu çalıştırın:
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Blazor Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle BlazorIdentity iletişim kutusunda:
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin.
Varsayılan olarak SQL Server olan veritabanı sağlayıcısını (Veritabanı sağlayıcısı) seçin.
Artı simgesini (+) seçin ve kullanıcı sınıfı olan User sınıfını ekleyin.
Add (Ekle) seçeneğini belirleyin.
Oluşturulan Identity veritabanı kodu için Entity Framework Core Migrations gerekir. Aşağıdaki adımlarda veritabanına geçişin nasıl oluşturulacağı ve uygulanacağı açıklanmaktadır.
Visual Studio Bağlı Hizmetler Entity Framework Core geçişi eklemek ve veritabanını güncelleştirmek için kullanılır.
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
Service Dependencies içindeki SQL Server Express LocalDB alanında Diğer eylemler (...) >Geçiş ekle seçeneğini belirleyin.
Geçişe, geçişi açıklayan bir ad olan geçiş adı olarak örneğin
CreateIdentitySchemaverin.DbContext sınıf adları alanına veritabanı bağlamının yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Diğer eylemler 'i (...) > seçinVeritabanını güncelleştirin.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Veritabanını güncelleştirme komutu, oluşturucu tarafından oluşturulan bir geçiş kodu dosyasında uygulanmamış olan Up yöntemi geçişlerini çalıştırır. Bu durumda komut, yöntemini Up dosyasında çalıştırarak tabloları, kısıtlamaları ve dizinleri oluştururIdentity.
{TIME STAMP} yer tutucusu bir zaman damgasıdır ve {MIGRATION NAME} yer tutucusu ise geçişin adıdır.
İstemci tarafı Blazor uygulamaları (Bağımsız Blazor WebAssembly)
İstemci tarafı Blazor uygulamaları (Tek başına Blazor WebAssembly) kendi Identity kullanıcı arabirimi yaklaşımlarını kullanır ve ASP.NET Çekirdek Identity iskelesini kullanamaz.
Daha fazla bilgi için Blazor Güvenlik ve Identity makalelerine bakın.
Identity iskeletini mevcut bir yetkilendirme olmadan bir Razor projeye ekleme
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Not
.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.
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) seçin. Varsayılan değeri kabul edin veya için Identityyeni bir sınıf belirtin.
Yeni bir kullanıcı sınıfı oluşturmak için+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seçin.
Geçişler, UseAuthentication ve düzen
Oluşturulan Identity veritabanı kodu için Entity Framework Core Migrations gerekir. Identity şemasını oluşturacak bir geçiş henüz oluşturulup veritabanına uygulanmadıysa, bir geçiş oluşturmak ve veritabanını güncelleştirmek için aşağıdaki yordamları kullanın.
Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
Hizmet Bağımlılıkları içindeki SQL Server Express LocalDB alanında, Diğer eylemler (...) >Geçiş ekle seçeneğini belirleyin.
Geçişe, geçişi açıklayan bir ad olan geçiş adı olarak örneğin
CreateIdentitySchemaverin.DbContext sınıf adları alanına veritabanı bağlamının yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Diğer eylemler 'i (...) > seçinVeritabanını güncelleştirin.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Veritabanını güncelleştirme komutu, oluşturucu tarafından oluşturulan bir geçiş kodu dosyasında uygulanmamış olan Up yöntemi geçişlerini çalıştırır. Bu durumda komut, yöntemini Up dosyasında çalıştırarak tabloları, kısıtlamaları ve dizinleri oluştururIdentity.
{TIME STAMP} yer tutucusu bir zaman damgasıdır ve {MIGRATION NAME} yer tutucusu ise geçişin adıdır.
Identity Şema oluşturulduysa ancak veritabanına uygulanmadıysa, veritabanını güncelleştirmek için komutunu çalıştırmanız yeterlidir:
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
SQL Server Express LocalDBService Dependencies alanında More actions (... öğesini seçin. ) >Update database.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
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 içinde, Get-Migration komutunu çalıştırın:
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.
Düzen değişiklikleri
Seçenek olarak, düzen dosyasına kısmi (_LoginPartial) oturum açma bilgilerini ekleyebilirsiniz:
<!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>
Identity ile yetkilendirmeli bir Razor projesi için iskelet oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Not
.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.
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) 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+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seçin.
Mevcut bir yetkilendirme olmadan bir MVC projesine Identity iskele ekleme
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Not
.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.
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) seçin. Varsayılan değeri kabul edin veya için Identityyeni bir sınıf belirtin.
Yeni bir kullanıcı sınıfı oluşturmak için+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seç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 için Entity Framework Core Migrations gerekir. Identity şemasını oluşturacak bir geçiş henüz oluşturulup veritabanına uygulanmadıysa, bir geçiş oluşturmak ve veritabanını güncelleştirmek için aşağıdaki yordamları kullanın.
Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
Hizmet Bağımlılıkları içindeki SQL Server Express LocalDB alanında, Diğer eylemler (...) >Geçiş ekle seçeneğini belirleyin.
Geçişe, geçişi açıklayan bir ad olan geçiş adı olarak örneğin
CreateIdentitySchemaverin.DbContext sınıf adları alanına veritabanı bağlamının yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Diğer eylemler 'i (...) > seçinVeritabanını güncelleştirin.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Veritabanını güncelleştirme komutu, oluşturucu tarafından oluşturulan bir geçiş kodu dosyasında uygulanmamış olan Up yöntemi geçişlerini çalıştırır. Bu durumda komut, yöntemini Up dosyasında çalıştırarak tabloları, kısıtlamaları ve dizinleri oluştururIdentity.
{TIME STAMP} yer tutucusu bir zaman damgasıdır ve {MIGRATION NAME} yer tutucusu ise geçişin adıdır.
Identity Şema oluşturulduysa ancak veritabanına uygulanmadıysa, veritabanını güncelleştirmek için komutunu çalıştırmanız yeterlidir:
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
SQL Server Express LocalDBService Dependencies alanında More actions (... öğesini seçin. ) >Update database.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
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 içinde, Get-Migration komutunu çalıştırın:
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.
Aşağıdaki vurgulanmış kodda gösterildiği gibi MapRazorPages dosyasına ekleyin:
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();
Yetkilendirme içeren bir MVC projesine Identity iskelet oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Not
.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.
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) 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+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seçin.
Tam Identity kullanıcı arabirimi kaynağı oluşturma
Identity kullanıcı arayüzü üzerinde tam denetimi sürdürmek için Identity oluşturucuyu çalıştırın ve Tüm dosyaların üzerine yaz seçeneğini belirleyin.
Parola yapılandırması
PasswordOptions, Startup.ConfigureServices içinde yapılandırılmışsa, scaffold edilen sayfalarındaki Password özelliği için Identity yapılandırması gerekebilir.
InputModel ve onun Password özellikleri aşağıdaki dosyalarda bulunur:
- Alanlar//IdentitySayfalar/Hesap/Register.cshtml.cs
- Alanlar//IdentitySayfalar/Hesap/ResetPassword.cshtml.cs
Sayfayı devre dışı bırakma
Bu bölümde kayıt sayfasını nasıl devre dışı bırakacağınız açıklanır, ancak herhangi bir sayfayı devre dışı bırakmak için aynı yöntemi kullanabilirsiniz.
Kullanıcı kaydını devre dışı bırakmak için:
İskele Identity. ,
Account.RegisterveAccount.LoginekleyinAccount.RegisterConfirmation. Örneğin:dotnet aspnet-codegenerator identity -dc RPauth.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.RegisterConfirmation"Alanlar//Sayfalar/IdentityHesap/Register.cshtml.cs dosyasını güncelleştirerek kullanıcıların bu uç noktadan kaydolmasını engelleyin:
public class RegisterModel : PageModel { public IActionResult OnGet() { return RedirectToPage("Login"); } public IActionResult OnPost() { return RedirectToPage("Login"); } }Areas//Pages/IdentityAccount/Register.cshtml dosyasını önceki değişikliklerle tutarlı olacak şekilde 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>Areas/Identity/Pages/Account/Login.cshtml dosyasındaki kayıt bağlantısını yorum satırı hâline getirin veya kaldırın:
@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@Sayfayı güncelleştirin
Areas/Identity/Pages/Account/RegisterConfirmation..cshtml dosyasından kodu ve bağlantıları kaldırın.
Onay kodunu
PageModeluygulamasından 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:
- Bellekte kullanıcı listesini okuyun.
- Her kullanıcı için güçlü bir benzersiz parola oluşturun.
- Kullanıcıyı Identity veritabanına ekleyin.
- Kullanıcıya parolasını değiştirmesini bildirin.
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ın web kök dizininde yayımlanmasını önlemek için bkz. ASP.NET Core'da Identity konusuna giriş.
ASP.NET Core, ASP.NET Core Identity öğesini bir Razor sınıf kitaplığı (RCL) olarak sağlar. Identity içeren uygulamalar, Identity RCL’sinde bulunan kaynak kodunu seçerek eklemek için iskeleyiciyi kullanabilir. Kodu değiştirmek ve davranışı değiştirmek için kaynak kodu oluşturmak isteyebilirsiniz. Örneğin, iskelet oluşturucuya kayıt işleminde 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. Identity iskele oluşturucusunu çalıştırdıktan sonra değişiklikleri inceleyin.
İki Faktörlü Kimlik Doğrulama, hesap doğrulaması ve parola kurtarma ve Identity ile diğer güvenlik özelliklerini kullanırken hizmetler gereklidir. Identity iskelet oluşturma sırasında hizmetler veya hizmet taslakları 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.
Identity iskeletini mevcut bir yetkilendirme olmadan bir Razor projeye ekleme
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Not
.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.
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) seçin. Varsayılan değeri kabul edin veya için Identityyeni bir sınıf belirtin.
Yeni bir kullanıcı sınıfı oluşturmak için+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seçin.
Geçişler, UseAuthentication ve düzen
Oluşturulan Identity veritabanı kodu için Entity Framework Core Migrations gerekir. Identity şemasını oluşturacak bir geçiş henüz oluşturulup veritabanına uygulanmadıysa, bir geçiş oluşturmak ve veritabanını güncelleştirmek için aşağıdaki yordamları kullanın.
Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
Hizmet Bağımlılıkları içindeki SQL Server Express LocalDB alanında, Diğer eylemler (...) >Geçiş ekle seçeneğini belirleyin.
Geçişe, geçişi açıklayan bir ad olan geçiş adı olarak örneğin
CreateIdentitySchemaverin.DbContext sınıf adları alanına veritabanı bağlamının yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Diğer eylemler 'i (...) > seçinVeritabanını güncelleştirin.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Veritabanını güncelleştirme komutu, oluşturucu tarafından oluşturulan bir geçiş kodu dosyasında uygulanmamış olan Up yöntemi geçişlerini çalıştırır. Bu durumda komut, yöntemini Up dosyasında çalıştırarak tabloları, kısıtlamaları ve dizinleri oluştururIdentity.
{TIME STAMP} yer tutucusu bir zaman damgasıdır ve {MIGRATION NAME} yer tutucusu ise geçişin adıdır.
Identity Şema oluşturulduysa ancak veritabanına uygulanmadıysa, veritabanını güncelleştirmek için komutunu çalıştırmanız yeterlidir:
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
SQL Server Express LocalDBService Dependencies alanında More actions (... öğesini seçin. ) >Update database.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
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 içinde, Get-Migration komutunu çalıştırın:
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>
Identity ile yetkilendirmeli bir Razor projesi için iskelet oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Not
.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.
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) 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+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seçin.
Mevcut bir yetkilendirme olmadan bir MVC projesine Identity iskele ekleme
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Not
.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.
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) seçin. Varsayılan değeri kabul edin veya için Identityyeni bir sınıf belirtin.
Yeni bir kullanıcı sınıfı oluşturmak için+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seç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 için Entity Framework Core Migrations gerekir. Identity şemasını oluşturacak bir geçiş henüz oluşturulup veritabanına uygulanmadıysa, bir geçiş oluşturmak ve veritabanını güncelleştirmek için aşağıdaki yordamları kullanın.
Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
Hizmet Bağımlılıkları içindeki SQL Server Express LocalDB alanında, Diğer eylemler (...) >Geçiş ekle seçeneğini belirleyin.
Geçişe, geçişi açıklayan bir ad olan geçiş adı olarak örneğin
CreateIdentitySchemaverin.DbContext sınıf adları alanına veritabanı bağlamının yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Diğer eylemler 'i (...) > seçinVeritabanını güncelleştirin.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Veritabanını güncelleştirme komutu, oluşturucu tarafından oluşturulan bir geçiş kodu dosyasında uygulanmamış olan Up yöntemi geçişlerini çalıştırır. Bu durumda komut, yöntemini Up dosyasında çalıştırarak tabloları, kısıtlamaları ve dizinleri oluştururIdentity.
{TIME STAMP} yer tutucusu bir zaman damgasıdır ve {MIGRATION NAME} yer tutucusu ise geçişin adıdır.
Identity Şema oluşturulduysa ancak veritabanına uygulanmadıysa, veritabanını güncelleştirmek için komutunu çalıştırmanız yeterlidir:
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
SQL Server Express LocalDBService Dependencies alanında More actions (... öğesini seçin. ) >Update database.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
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 içinde, Get-Migration komutunu çalıştırın:
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.
Aşağıda vurgulanan kodda gösterildiği gibi, MapRazorPages öğesini Program.cs öğesine ekleyin:
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();
Yetkilendirme içeren bir MVC projesine Identity iskelet oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Not
.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.
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) 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+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seçin.
Yetkilendirme ile sunucu tarafı Identity uygulamasına Blazor iskelet oluşturma
Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet paketini yükleyin.
Not
.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.
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) 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+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seçin.
Geçişler
Oluşturulan Identity veritabanı kodu için Entity Framework Core Migrations gerekir. Identity şemasını oluşturacak bir geçiş henüz oluşturulup veritabanına uygulanmadıysa, bir geçiş oluşturmak ve veritabanını güncelleştirmek için aşağıdaki yordamları kullanın.
Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
Hizmet Bağımlılıkları içindeki SQL Server Express LocalDB alanında, Diğer eylemler (...) >Geçiş ekle seçeneğini belirleyin.
Geçişe, geçişi açıklayan bir ad olan geçiş adı olarak örneğin
CreateIdentitySchemaverin.DbContext sınıf adları alanına veritabanı bağlamının yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Diğer eylemler 'i (...) > seçinVeritabanını güncelleştirin.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Veritabanını güncelleştirme komutu, oluşturucu tarafından oluşturulan bir geçiş kodu dosyasında uygulanmamış olan Up yöntemi geçişlerini çalıştırır. Bu durumda komut, yöntemini Up dosyasında çalıştırarak tabloları, kısıtlamaları ve dizinleri oluştururIdentity.
{TIME STAMP} yer tutucusu bir zaman damgasıdır ve {MIGRATION NAME} yer tutucusu ise geçişin adıdır.
Identity Şema oluşturulduysa ancak veritabanına uygulanmadıysa, veritabanını güncelleştirmek için komutunu çalıştırmanız yeterlidir:
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
SQL Server Express LocalDBService Dependencies alanında More actions (... öğesini seçin. ) >Update database.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
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 içinde, Get-Migration komutunu çalıştırın:
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.
Style kimlik doğrulama uç noktaları
Sunucu taraflı Blazor uygulamalar Razor Pages Identity sayfalarını kullandığından, bir ziyaretçi Identity sayfalar ve bileşenler arasında gezindiğinde kullanıcı arayüzünün 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, çıkış yapma ve diğer kullanıcı yönetimi görevleri gibi Razor ile ilgili kullanıcı arabirimi için Razor bileşenleri yerine Identity Pages kullanmalıdır.
SignInManager<TUser> ve UserManager<TUser>, Razor bileşenlerinde desteklenmediğinden, Identity bileşenlerinden Razor eylemlerini, sunucu tarafında Identity özellikli bir ASP.NET Core uygulaması aracılığıyla yönetmek için web API'sini kullanmanızı öneririz. Blazor uygulamaları için web API'leri oluşturmaya yönelik yönergeler için ASP.NET Core Blazor uygulamasından web API'si çağırma konusuna bakın.
Razor sayfaları yerine Identity için Razor bileşenlerini kullanmanın bir yolu, kendi özel IdentityRazor bileşenlerinizi oluşturmaktır, ancak Microsoft bu yaklaşımı önermez ve 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)
-
SigninManager<T>Bileşenlerinde Razor desteklenmemesi konusunda tekrar (dotnet/aspnetcore #34095) - Sunucu tarafı blazor (dotnet/AspNetCore.Docs #16813) için özel oturum açma formunun nasıl uygulanacağı hakkında bilgi yoktur
Ö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 )
Blazor uygulama stilleriyle özel bir düzen kullanın
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. Barındırılan Blazor çözümlerinin sunucu taraflı ASP.NET Core uygulamaları, bu makaledeki Razor Pages/MVC kılavuzunu izleyebilir ve Identity destekleyen diğer tüm ASP.NET Core uygulama türleri gibi yapılandırılır.
Çerçeve, Blazor kullanıcı arabirimi sayfalarının Razor bileşen sürümlerini içermezIdentity. Identity Kullanıcı arabirimi Razor bileşenleri özel olarak oluşturulabilir veya desteklenmeyen üçüncü taraf kaynaklardan alınabilir.
Daha fazla bilgi için Blazor Güvenlik ve Identity makalelerine bakın.
Tam Identity kullanıcı arabirimi kaynağı oluşturma
Identity kullanıcı arayüzü üzerinde tam denetimi sürdürmek için Identity oluşturucuyu çalıştırın ve Tüm dosyaların üzerine yaz seçeneğini belirleyin.
Parola yapılandırması
PasswordOptions içinde Startup.ConfigureServices yapılandırıldıysa, iskelet oluşturulmuş [StringLength] sayfalarındaki özelliği için Password yapılandırması gerekebilir.
InputModel
Password özellikleri aşağıdaki dosyalarda bulunur:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/Identity/Pages/Account/ResetPassword.cshtml.cs
Sayfayı devre dışı bırakma
Bu bölümde kayıt sayfasının nasıl devre dışı bırakılacağı gösterilmektedir, ancak aynı yaklaşım herhangi bir sayfayı devre dışı bırakmak için kullanılabilir.
Kullanıcı kaydını devre dışı bırakmak için:
İskele 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>Areas/Identity/Pages/Account/Login.cshtmliçindeki kayıt bağlantısını yoruma alın veya kaldırın.@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@Sayfayı güncelleştirin
Areas/Identity/Pages/Account/RegisterConfirmation.- Cshtml dosyasından kodu ve bağlantıları kaldırın.
-
PageModelonay kodunu 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ın web kök dizininde yayımlanmasını önlemek için bkz. ASP.NET Core'da Identity konusuna giriş.
ASP.NET Core, ASP.NET Core Identity öğesini bir Razor sınıf kitaplığı (RCL) olarak sağlar. Identity içeren uygulamalar, Identity RCL’sinde bulunan kaynak kodunu seçerek eklemek için iskeleyiciyi kullanabilir. Kodu değiştirmek ve davranışı değiştirmek için kaynak kodu oluşturmak isteyebilirsiniz. Örneğin, iskelet oluşturucuya kayıt işleminde 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. Identity iskele oluşturucusunu çalıştırdıktan sonra değişiklikleri inceleyin.
İki Faktörlü Kimlik Doğrulama, hesap doğrulaması ve parola kurtarma ve Identity ile diğer güvenlik özelliklerini kullanırken hizmetler gereklidir. Identity iskelet oluşturma sırasında hizmetler veya hizmet taslakları oluşturulmaz. Bu özellikleri etkinleştirmek için hizmetlerin el ile eklenmesi gerekir. Örneğin, bkz. E-posta Onayı Gerektir.
Mevcut bireysel hesaplara sahip bir projede Identity iskeletini yeni bir veri bağlamıyla oluştururken, Startup.ConfigureServices dosyasını açın ve şu çağrıları kaldırın:
AddDbContextAddDefaultIdentity
Örneğin, AddDbContext ve AddDefaultIdentity aşağıdaki kodda yorum satırı hâline getirilmiştir:
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, Areas/Identity/IdentityHostingStartup.cs içinde yinelenen kodu yorum satırı hâline getirir.
Genellikle, tek tek hesaplarla oluşturulan uygulamalar yeni bir veri bağlamı oluşturmamalıdır.
Boş bir projeyi Identity ile oluşturma
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) seçin. Varsayılan değeri kabul edin veya için Identityyeni bir sınıf belirtin.
Yeni bir kullanıcı sınıfı oluşturmak için+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seç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 Strict Transport Security (HSTS) protokolü.
Oluşturulan Identity veritabanı kodu için Entity Framework Core Migrations gerekir. Identity şemasını oluşturacak bir geçiş henüz oluşturulup veritabanına uygulanmadıysa, bir geçiş oluşturmak ve veritabanını güncelleştirmek için aşağıdaki yordamları kullanın.
Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
Hizmet Bağımlılıkları içindeki SQL Server Express LocalDB alanında, Diğer eylemler (...) >Geçiş ekle seçeneğini belirleyin.
Geçişe, geçişi açıklayan bir ad olan geçiş adı olarak örneğin
CreateIdentitySchemaverin.DbContext sınıf adları alanına veritabanı bağlamının yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Diğer eylemler 'i (...) > seçinVeritabanını güncelleştirin.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Veritabanını güncelleştirme komutu, oluşturucu tarafından oluşturulan bir geçiş kodu dosyasında uygulanmamış olan Up yöntemi geçişlerini çalıştırır. Bu durumda komut, yöntemini Up dosyasında çalıştırarak tabloları, kısıtlamaları ve dizinleri oluştururIdentity.
{TIME STAMP} yer tutucusu bir zaman damgasıdır ve {MIGRATION NAME} yer tutucusu ise geçişin adıdır.
Identity Şema oluşturulduysa ancak veritabanına uygulanmadıysa, veritabanını güncelleştirmek için komutunu çalıştırmanız yeterlidir:
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
SQL Server Express LocalDBService Dependencies alanında More actions (... öğesini seçin. ) >Update database.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
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 içinde, Get-Migration komutunu çalıştırın:
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.
Identity iskeletini mevcut bir yetkilendirme olmadan bir Razor projeye ekleme
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) seçin. Varsayılan değeri kabul edin veya için Identityyeni bir sınıf belirtin.
Yeni bir kullanıcı sınıfı oluşturmak için+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seçin.
Identity, Areas/Identity/IdentityHostingStartup.cs içinde yapılandırılır. Daha fazla bilgi için bkz. IHostingStartup.
Geçişler, UseAuthentication ve düzen
Oluşturulan Identity veritabanı kodu için Entity Framework Core Migrations gerekir. Identity şemasını oluşturacak bir geçiş henüz oluşturulup veritabanına uygulanmadıysa, bir geçiş oluşturmak ve veritabanını güncelleştirmek için aşağıdaki yordamları kullanın.
Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
Hizmet Bağımlılıkları içindeki SQL Server Express LocalDB alanında, Diğer eylemler (...) >Geçiş ekle seçeneğini belirleyin.
Geçişe, geçişi açıklayan bir ad olan geçiş adı olarak örneğin
CreateIdentitySchemaverin.DbContext sınıf adları alanına veritabanı bağlamının yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Diğer eylemler 'i (...) > seçinVeritabanını güncelleştirin.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Veritabanını güncelleştirme komutu, oluşturucu tarafından oluşturulan bir geçiş kodu dosyasında uygulanmamış olan Up yöntemi geçişlerini çalıştırır. Bu durumda komut, yöntemini Up dosyasında çalıştırarak tabloları, kısıtlamaları ve dizinleri oluştururIdentity.
{TIME STAMP} yer tutucusu bir zaman damgasıdır ve {MIGRATION NAME} yer tutucusu ise geçişin adıdır.
Identity Şema oluşturulduysa ancak veritabanına uygulanmadıysa, veritabanını güncelleştirmek için komutunu çalıştırmanız yeterlidir:
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
SQL Server Express LocalDBService Dependencies alanında More actions (... öğesini seçin. ) >Update database.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
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 içinde, Get-Migration komutunu çalıştırın:
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 Strict Transport Security (HSTS) 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>
Identity ile yetkilendirmeli bir Razor projesi için iskelet oluşturma
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) 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+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seçin.
Bazı Identity seçenekler Areas/Identity/IdentityHostingStartup.cs içinde yapılandırılır. Daha fazla bilgi için bkz. IHostingStartup.
Mevcut bir yetkilendirme olmadan bir MVC projesine Identity iskele ekleme
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) seçin. Varsayılan değeri kabul edin veya için Identityyeni bir sınıf belirtin.
Yeni bir kullanıcı sınıfı oluşturmak için+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seç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ı Pages/Shared/_LoginPartial.cshtml konumundan Views/Shared/_LoginPartial.cshtml konumuna taşıyın.
Identity, Areas/Identity/IdentityHostingStartup.cs içinde yapılandırılır. Daha fazla bilgi için bkz. IHostingStartup.
Oluşturulan Identity veritabanı kodu için Entity Framework Core Migrations gerekir. Identity şemasını oluşturacak bir geçiş henüz oluşturulup veritabanına uygulanmadıysa, bir geçiş oluşturmak ve veritabanını güncelleştirmek için aşağıdaki yordamları kullanın.
Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
Hizmet Bağımlılıkları içindeki SQL Server Express LocalDB alanında, Diğer eylemler (...) >Geçiş ekle seçeneğini belirleyin.
Geçişe, geçişi açıklayan bir ad olan geçiş adı olarak örneğin
CreateIdentitySchemaverin.DbContext sınıf adları alanına veritabanı bağlamının yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Diğer eylemler 'i (...) > seçinVeritabanını güncelleştirin.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Veritabanını güncelleştirme komutu, oluşturucu tarafından oluşturulan bir geçiş kodu dosyasında uygulanmamış olan Up yöntemi geçişlerini çalıştırır. Bu durumda komut, yöntemini Up dosyasında çalıştırarak tabloları, kısıtlamaları ve dizinleri oluştururIdentity.
{TIME STAMP} yer tutucusu bir zaman damgasıdır ve {MIGRATION NAME} yer tutucusu ise geçişin adıdır.
Identity Şema oluşturulduysa ancak veritabanına uygulanmadıysa, veritabanını güncelleştirmek için komutunu çalıştırmanız yeterlidir:
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
SQL Server Express LocalDBService Dependencies alanında More actions (... öğesini seçin. ) >Update database.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
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 içinde, Get-Migration komutunu çalıştırın:
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 Strict Transport Security (HSTS) protokolü.
Yetkilendirme içeren bir MVC projesine Identity iskelet oluşturma
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) 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+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seçin.
Identity öğesini, mevcut yetkilendirme olmadan sunucu taraflı Blazor uygulamasına ekleyin
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) seçin. Varsayılan değeri kabul edin veya için Identityyeni bir sınıf belirtin.
Yeni bir kullanıcı sınıfı oluşturmak için+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seçin.
Identity, Areas/Identity/IdentityHostingStartup.cs içinde yapılandırılır. Daha fazla bilgi için bkz. IHostingStartup.
Geçişler
Oluşturulan Identity veritabanı kodu için Entity Framework Core Migrations gerekir. Identity şemasını oluşturacak bir geçiş henüz oluşturulup veritabanına uygulanmadıysa, bir geçiş oluşturmak ve veritabanını güncelleştirmek için aşağıdaki yordamları kullanın.
Visual Studio Bağlı Hizmetler , geçiş EF Core eklemek ve veritabanını güncelleştirmek için kullanılır.
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
Hizmet Bağımlılıkları içindeki SQL Server Express LocalDB alanında, Diğer eylemler (...) >Geçiş ekle seçeneğini belirleyin.
Geçişe, geçişi açıklayan bir ad olan geçiş adı olarak örneğin
CreateIdentitySchemaverin.DbContext sınıf adları alanına veritabanı bağlamının yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Diğer eylemler 'i (...) > seçinVeritabanını güncelleştirin.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
Veritabanını güncelleştirme komutu, oluşturucu tarafından oluşturulan bir geçiş kodu dosyasında uygulanmamış olan Up yöntemi geçişlerini çalıştırır. Bu durumda komut, yöntemini Up dosyasında çalıştırarak tabloları, kısıtlamaları ve dizinleri oluştururIdentity.
{TIME STAMP} yer tutucusu bir zaman damgasıdır ve {MIGRATION NAME} yer tutucusu ise geçişin adıdır.
Identity Şema oluşturulduysa ancak veritabanına uygulanmadıysa, veritabanını güncelleştirmek için komutunu çalıştırmanız yeterlidir:
Çözüm Gezgini'da Bağlı Hizmetler'e çift tıklayın.
SQL Server Express LocalDBService Dependencies alanında More actions (... öğesini seçin. ) >Update database.
Veritabanını en son geçişle güncelleştir iletişim kutusu açılır.
DbContext sınıf adları alanının güncelleştirilmesini ve önceki geçişlerin yüklenmesini bekleyin. Eylem birkaç saniye sürebilir.
Güncelleştirmeyi tamamlamak için Son'u seçin. İşlem tamamlandıktan sonra Kapat'ı seçin.
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 içinde, Get-Migration komutunu çalıştırın:
Get-Migration
Birden fazla veritabanı bağlamı varsa, bağlamı parametresiyle -Context belirtin.
Style kimlik doğrulama uç noktaları
Sunucu taraflı Blazor uygulamalar Razor Pages Identity sayfalarını kullandığından, bir ziyaretçi Identity sayfalar ve bileşenler arasında gezindiğinde kullanıcı arayüzünün stili değişir. Uyumsuz stilleri ele almak için iki seçeneğiniz vardır:
Özel Identity bileşenler
Sayfalar yerine Identity için bileşenler kullanmaya yönelik bir yaklaşım, Identity bileşenleri oluşturmaktır.
SignInManager ve UserManager, Razor bileşenlerinde desteklenmediğinden, kullanıcı hesabı eylemlerini işlemek için Blazor uygulamasındaki web API uç noktalarını kullanın.
Blazor uygulama stilleriyle özel bir düzen kullanın
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ı Identity uygulamasına Blazor iskelet oluşturma
Identity Aşağıdaki yordamlarla iskeleyi çalıştırın.
Çözüm Gezgini'da projeye sağ tıklayın ve Add>Yeni İskeleli Öğe öğesini seçin.
Yeni İskeleli Öğe Ekle iletişim kutusunun sol bölmesinde öğesini seçinIdentity.
Orta bölmede Identity öğesini seçin ve ardından Ekle seçeneğini belirleyin.
Ekle Identity iletişim kutusunda istediğiniz seçenekleri belirleyin:
Identity için mevcut bir özelleştirilmiş düzen sayfanız (_Layout.cshtml) varsa, iskele oluşturucunun düzeninizin üzerine hatalı işaretleme yazmasını önlemek için mevcut sayfayı seçin. Örneğin, aşağıdakilerden birini seçin:
- Pages/Shared/_Layout.cshtml, mevcut Razor Pages altyapısına sahip Blazor Server Pages veya Razor projeleri için.
- MVC projeleri veya mevcut MVC altyapısına sahip projeler için Blazor Server.
Artı simgesini (+) seçin ve veritabanı bağlam sınıfı olan DbContext sınıfını ekleyin. Veri bağlamınızı eklemek için en az bir dosya seçmelisiniz.
Veri bağlamı oluşturmak için artı simgesini (+ ) 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+ için artı simgesini () seçin ve sınıfı belirtin (örneğin,
ContosoUser"Contoso" adlı bir şirket için).
İskeleyi çalıştırmak için Ekle'yi seçin.
Bazı Identity seçenekler Areas/Identity/IdentityHostingStartup.cs içinde 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. Barındırılan Blazor çözümlerinin sunucu taraflı ASP.NET Core uygulamaları, bu makaledeki Razor Pages/MVC kılavuzunu izleyebilir ve Identity destekleyen diğer tüm ASP.NET Core uygulama türleri gibi yapılandırılır.
Çerçeve, Blazor kullanıcı arabirimi sayfalarının Razor bileşen sürümlerini içermezIdentity. Identity Kullanıcı arabirimi Razor bileşenleri özel olarak oluşturulabilir veya desteklenmeyen üçüncü taraf kaynaklardan alınabilir.
Daha fazla bilgi için Blazor Güvenlik ve Identity makalelerine bakın.
Tam Identity kullanıcı arabirimi kaynağı oluşturma
Identity kullanıcı arayüzü üzerinde tam denetimi sürdürmek için Identity oluşturucuyu çalıştırın ve Tüm dosyaların üzerine yaz seçeneğini belirleyin.
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, LoginPath, LogoutPath ve AccessDeniedPath öğelerini 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 içinde Startup.ConfigureServices yapılandırıldıysa, iskelet oluşturulmuş [StringLength] sayfalarındaki özelliği için Password yapılandırması gerekebilir.
InputModel
Password özellikleri aşağıdaki dosyalarda bulunur:
Areas/Identity/Pages/Account/Register.cshtml.csAreas/Identity/Pages/Account/ResetPassword.cshtml.cs
Sayfayı devre dışı bırakma
Bu bölümde kayıt sayfasının nasıl devre dışı bırakılacağı gösterilmektedir, ancak aynı yaklaşım herhangi bir sayfayı devre dışı bırakmak için kullanılabilir.
Kullanıcı kaydını devre dışı bırakmak için:
İskele 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>Areas/Identity/Pages/Account/Login.cshtmliçindeki kayıt bağlantısını yoruma alın veya kaldırın.@* <p> <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a> </p> *@Sayfayı güncelleştirin
Areas/Identity/Pages/Account/RegisterConfirmation.- Cshtml dosyasından kodu ve bağlantıları kaldırın.
-
PageModelonay kodunu 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ın web kök dizininde yayımlanmasını önlemek için bkz. ASP.NET Core'da Identity konusuna giriş.
Ek kaynaklar
ASP.NET Core 2.1 veya sonraki sürümlerde kimlik doğrulama kodunda yapılan değişiklikler
İlgili içerik
ASP.NET Core