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.
İpucu
Bu içerik, Blazor .NET Docs'ta veya çevrimdışı olarak okunabilen ücretsiz indirilebilir bir PDF olarak sağlanan Azure için ASP NET Web Forms Geliştiricileri için e-Kitap'tan bir alıntıdır.
Bir ASP.NET Web Forms uygulamasından uygulamasına geçiş yapmak Blazor için, uygulamanın kimlik doğrulamasının yapılandırıldığı varsayılarak kimlik doğrulaması ve yetkilendirmenin nasıl gerçekleştirildiğinin güncelleştirilmesi neredeyse kesinlikle gerekecektir. Bu bölümde, ASP.NET Web Forms evrensel sağlayıcı modelinden (üyelik, roller ve kullanıcı profilleri için) geçiş ve uygulamalardan Blazor ASP.NET Core Identity ile çalışma konuları ele alınacaktır. Bu bölümde üst düzey adımlar ve dikkat edilmesi gerekenler ele alınsa da, ayrıntılı adımlar ve betikler başvurulan belgelerde bulunabilir.
Evrensel sağlayıcıları ASP.NET
ASP.NET 2.0'dan bu yana, ASP.NET Web Forms platformu üyelik de dahil olmak üzere çeşitli özellikler için bir sağlayıcı modelini desteklemiştir. Evrensel üyelik sağlayıcısı ve isteğe bağlı rol sağlayıcısı yaygın olarak ASP.NET Web Forms uygulamalarıyla dağıtılır. Bugün iyi çalışmaya devam eden kimlik doğrulamasını ve yetkilendirmeyi yönetmek için sağlam ve güvenli bir yol sunar. Bu evrensel sağlayıcıların en son teklifi, Microsoft.AspNet.Providers adlı bir NuGet paketi olarak kullanılabilir.
Evrensel Sağlayıcılar , , aspnet_Applications
aspnet_Membership
ve aspnet_Roles
gibi aspnet_Users
tabloları içeren bir SQL veritabanı şemasıyla çalışır. sağlayıcılar, aspnet_regsql.exe komutunu çalıştırarak yapılandırıldığında, temel alınan verilerle çalışmak için gerekli tüm sorguları ve komutları sağlayan tabloları ve saklı yordamları yükler. Veritabanı şeması ve bu saklı yordamlar daha yeni ASP.NET Kimliği ve ASP.NET Çekirdek Kimlik sistemleriyle uyumlu olmadığından, mevcut verilerin yeni sisteme geçirilmesi gerekir. Şekil 1'de evrensel sağlayıcılar için yapılandırılmış örnek bir tablo şeması gösterilmektedir.
Evrensel sağlayıcı kullanıcıları, üyeliği, rolleri ve profilleri işler. Kullanıcılara genel olarak benzersiz tanımlayıcılar atanır ve userId, userName gibi temel bilgiler tabloda depolanır aspnet_Users
. Parola, parola biçimi, parola tuzu, kilitleme sayaçları ve ayrıntılar gibi kimlik doğrulama bilgileri tabloda depolanır aspnet_Membership
. Roller, kullanıcılara ilişkilendirme tablosu aracılığıyla aspnet_UsersInRoles
atanan ve çoka çok ilişki sağlayan adlardan ve benzersiz tanımlayıcılardan oluşur.
Mevcut sisteminiz üyeliğin yanı sıra roller kullanıyorsa kullanıcı hesaplarını, ilişkili parolaları, rolleri ve rol üyeliğini ASP.NET Çekirdek Kimlik'e geçirmeniz gerekir. Ayrıca büyük olasılıkla, bildirim temelli filtreler, öznitelikler ve/veya etiket yardımcılarından yararlanmak için if deyimlerini kullanarak rol denetimleri gerçekleştirdiğiniz kodunuzu güncelleştirmeniz gerekir. Bu bölümün sonunda geçişle ilgili önemli noktaları daha ayrıntılı olarak inceleyeceğiz.
Web Forms'da yetkilendirme yapılandırması
ASP.NET Web Forms uygulamasındaki belirli sayfalara yetkili erişimi yapılandırmak için, genellikle belirli sayfa veya klasörlerin anonim kullanıcılar tarafından erişilememesini belirtirsiniz. Bu yapılandırma web.config dosyasında yapılır:
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms">
<forms defaultUrl="~/home.aspx" loginUrl="~/login.aspx"
slidingExpiration="true" timeout="2880"></forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
Yapılandırma authentication
bölümü, uygulama için form kimlik doğrulamasını ayarlar.
authorization
bölümü, anonim kullanıcıların uygulamanın tamamına izin vermemeye yöneliktir. Ancak, konum temelinde daha ayrıntılı yetkilendirme kuralları sağlayabilir ve rol tabanlı yetkilendirme denetimleri uygulayabilirsiniz.
<location path="login.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
Yukarıdaki yapılandırma, ilkiyle birleştirildiğinde anonim kullanıcıların oturum açma sayfasına erişmesine olanak tanıyarak kimliği doğrulanmamış kullanıcılardaki site genelindeki kısıtlamayı geçersiz kılır.
<location path="/admin">
<system.web>
<authorization>
<allow roles="Administrators" />
<deny users="*" />
</authorization>
</system.web>
</location>
Yukarıdaki yapılandırma, diğerleriyle birlikte kullanıldığında klasöre ve içindeki tüm kaynaklara /admin
erişimi "Yöneticiler" rolünün üyeleriyle kısıtlar. Bu kısıtlama, klasör köküne web.config
ayrı /admin
bir dosya yerleştirilerek de uygulanabilir.
Web Forms'da yetkilendirme kodu
kullanarak web.config
erişimi yapılandırmaya ek olarak, Web Forms uygulamanızda erişimi ve davranışı program aracılığıyla da yapılandırabilirsiniz. Örneğin, belirli işlemleri gerçekleştirme veya kullanıcının rolüne göre belirli verileri görüntüleme özelliğini kısıtlayabilirsiniz.
Bu kod hem arka planda kod mantığında hem de sayfanın kendisinde kullanılabilir:
<% if (HttpContext.Current.User.IsInRole("Administrators")) { %>
<a href="/admin">Go To Admin</a>
<% } %>
Kullanıcı rolü üyeliğini denetlemeye ek olarak, kimliklerinin doğrulanmış olup olmadığını da belirleyebilirsiniz (ancak genellikle bu, yukarıda ele alınan konum tabanlı yapılandırma kullanılarak daha iyi yapılır). Aşağıda bu yaklaşımın bir örneği verilmiştir.
protected void Page_Load(object sender, EventArgs e)
{
if (!User.Identity.IsAuthenticated)
{
FormsAuthentication.RedirectToLoginPage();
}
if (!Roles.IsUserInRole(User.Identity.Name, "Administrators"))
{
MessageLabel.Text = "Only administrators can view this.";
SecretPanel.Visible = false;
}
}
Yukarıdaki kodda rol tabanlı erişim denetimi (RBAC), sayfanın belirli öğelerinin (örneğin SecretPanel
, ) geçerli kullanıcının rolüne göre görünür olup olmadığını belirlemek için kullanılır.
Genellikle ASP.NET Web Forms uygulamaları dosya içinde web.config
güvenliği yapılandırır ve sonra sayfalarda ve ilgili .aspx
arka planda kod dosyalarında .aspx.cs
gerektiğinde ek denetimler ekler. Uygulamaların çoğu evrensel üyelik sağlayıcısından yararlanarak çoğunlukla ek rol sağlayıcısından yararlanabilir.
ASP.NET Çekirdek Kimliği
Yine de kimlik doğrulaması ve yetkilendirme ile görevlense de ASP.NET Çekirdek Kimlik, evrensel sağlayıcılarla karşılaştırıldığında farklı bir soyutlama ve varsayım kümesi kullanır. Örneğin, yeni Kimlik modeli üçüncü taraf kimlik doğrulamasını destekleyerek kullanıcıların bir sosyal medya hesabı veya diğer güvenilir kimlik doğrulama sağlayıcısını kullanarak kimlik doğrulaması gerçekleştirmesine olanak sağlar. ASP.NET Core Identity oturum açma, oturumu kapatma ve kaydetme gibi yaygın olarak gereken sayfalar için kullanıcı arabirimini destekler. Veri erişimi için EF Core'a yararlanıyor ve veri modelini desteklemek için gereken şemayı oluşturmak için EF Core geçişlerini kullanıyor. ASP.NET Core'da Kimlik'e giriş niteliğindeki bu giriş, ASP.NET Çekirdek Kimliği'ne nelerin dahil olduğuna ve bu kimlikle çalışmaya nasıl başlayabileceklerine ilişkin iyi bir genel bakış sağlar. Uygulamanızda ve veritabanında ASP.NET Core Identity'i henüz ayarlamadıysanız, kullanmaya başlamanıza yardımcı olur.
Roller, talepler ve ilkeler
Hem evrensel sağlayıcılar hem de ASP.NET Core Identity rol kavramını destekler. Kullanıcılar için roller oluşturabilir ve kullanıcıları rollere atayabilirsiniz. Kullanıcılar herhangi bir sayıda role ait olabilir ve yetkilendirme uygulamanızın bir parçası olarak rol üyeliğini doğrulayabilirsiniz.
ASP.NET Core kimliği, rollere ek olarak talep ve ilke kavramlarını da destekler. Bir rol özellikle bu roldeki bir kullanıcının erişebilmesi gereken bir kaynak kümesine karşılık geliyor olsa da, talep yalnızca kullanıcı kimliğinin bir parçasıdır. Talep, konunun yapabileceklerini değil, öznenin ne olduğunu temsil eden bir ad değer çiftidir.
Bir kullanıcının taleplerini doğrudan incelemek ve bu değerlere dayanarak bir kullanıcıya kaynağa erişim verilip verilmeyeceğini belirlemek mümkündür. Ancak, bu tür denetimler genellikle tekrarlanır ve sistem genelinde dağıtılır. İlke tanımlamak daha iyi bir yaklaşımdır.
Yetkilendirme ilkesi bir veya daha fazla gereksinimden oluşur. İlkeler, yönteminde yetkilendirme hizmeti yapılandırmasının ConfigureServices
Startup.cs
bir parçası olarak kaydedilir. Örneğin, aşağıdaki kod parçacığı kullanıcının "Canada" değeriyle Ülke talebine sahip olması gereksinimine sahip olan "CanadiansOnly" adlı bir ilkeyi yapılandırmıştır.
services.AddAuthorization(options =>
{
options.AddPolicy("CanadiansOnly", policy => policy.RequireClaim(ClaimTypes.Country, "Canada"));
});
Belgelerde özel ilkeler oluşturma hakkında daha fazla bilgi edinebilirsiniz.
İlkeleri veya rolleri kullanıyor olun, uygulamanızdaki Blazor belirli bir sayfanın yönergesiyle uygulanan özniteliğiyle [Authorize]
ilgili rolü veya ilkeyi gerektirdiğini @attribute
belirtebilirsiniz.
Rol gerektirme:
@attribute [Authorize(Roles ="administrators")]
İlkenin karşılanması gerekir:
@attribute [Authorize(Policy ="CanadiansOnly")]
Kodunuzda kullanıcının kimlik doğrulama durumuna, rollerine veya taleplerine erişmeniz gerekiyorsa, bu işlevi elde etmenin iki birincil yolu vardır. İlki, kimlik doğrulama durumunu basamaklı parametre olarak almaktır. İkincisi, eklenen kullanarak duruma erişmektir AuthenticationStateProvider
. Bu yaklaşımların her birinin ayrıntıları Güvenlik belgelerinde Blazoraçıklanmıştır.
Aşağıdaki kod, basamaklı parametre olarak değerinin nasıl alınıp alınmayacaklarını AuthenticationState
gösterir:
[CascadingParameter]
private Task<AuthenticationState> authenticationStateTask { get; set; }
Bu parametreyi kullandığınızda, kullanıcıyı şu kodu kullanarak alabilirsiniz:
var authState = await authenticationStateTask;
var user = authState.User;
Aşağıdaki kod, öğesinin nasıl ek yapılacağını AuthenticationStateProvider
gösterir:
@using Microsoft.AspNetCore.Components.Authorization
@inject AuthenticationStateProvider AuthenticationStateProvider
Sağlayıcıyı kullandığınızda aşağıdaki kodla kullanıcıya erişim elde edebilirsiniz:
AuthenticationState authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
ClaimsPrincipal user = authState.User;
if (user.Identity.IsAuthenticated)
{
// work with user.Claims and/or user.Roles
}
Not: Bu bölümün AuthorizeView
ilerleyen bölümlerinde ele alınan bileşen, bir kullanıcının sayfada veya bileşende ne gördüğünü denetlemek için bildirim temelli bir yol sağlar.
Kullanıcılar ve taleplerle çalışmak için ( Blazor Sunucu uygulamalarında) bir kullanıcı için talepleri listelemek ve değiştirmek için kullanabileceğiniz bir UserManager<T>
(varsayılan için kullanın IdentityUser
) eklemeniz gerekebilir. Önce türü ekleyip bir özelliğe atayın:
@inject UserManager<IdentityUser> MyUserManager
Ardından kullanıcının talepleri ile çalışmak için kullanın. Aşağıdaki örnek, bir kullanıcı üzerinde talep ekleme ve kalıcı hale nasıl ekleneceğini gösterir:
private async Task AddCountryClaim()
{
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
var user = authState.User;
var identityUser = await MyUserManager.FindByNameAsync(user.Identity.Name);
if (!user.HasClaim(c => c.Type == ClaimTypes.Country))
{
// stores the claim in the cookie
ClaimsIdentity id = new ClaimsIdentity();
id.AddClaim(new Claim(ClaimTypes.Country, "Canada"));
user.AddIdentity(id);
// save the claim in the database
await MyUserManager.AddClaimAsync(identityUser, new Claim(ClaimTypes.Country, "Canada"));
}
}
Rollerle çalışmanız gerekiyorsa aynı yaklaşımı izleyin. Rolleri listelemek ve yönetmek için bir RoleManager<T>
eklemeniz gerekebilir (varsayılan tür için kullanın IdentityRole
).
Not: WebAssembly projelerindeBlazor, bu işlemleri gerçekleştirmek için (doğrudan veya UserManager<T>
kullanmak RoleManager<T>
yerine) sunucu API'leri sağlamanız gerekir. WebAssembly Blazor istemci uygulaması, bu amaçla kullanıma sunulan API uç noktalarını güvenli bir şekilde çağırarak talepleri ve/veya rolleri yönetebilir.
Geçiş kılavuzu
ASP.NET Web Forms'dan ve evrensel sağlayıcılardan ASP.NET Core Identity'e geçiş yapmak için birkaç adım gerekir:
- Hedef veritabanında ASP.NET Çekirdek Kimlik veritabanı şeması oluşturma
- Verileri evrensel sağlayıcı şemasından ASP.NET Çekirdek Kimlik şemasına geçirme
- Yapılandırmayı
web.config
genellikle Program.cs (veya bir sınıfta) ara yazılıma ve hizmetlereStartup
geçirme - Etiket yardımcılarını ve yeni kimlik API'lerini kullanmak için denetimleri ve koşulluları kullanarak tek tek sayfaları güncelleştirin.
Bu adımların her biri aşağıdaki bölümlerde ayrıntılı olarak açıklanmıştır.
ASP.NET Çekirdek Kimlik şeması oluşturma
ASP.NET Çekirdek Kimliği için kullanılan gerekli tablo yapısını oluşturmanın birkaç yolu vardır. En basiti yeni bir ASP.NET Core Web uygulaması oluşturmaktır. Web Uygulaması'nı seçin ve kimlik doğrulama türünü Tek Tek Hesapları kullanacak şekilde değiştirin.
Komut satırından komutunu çalıştırarak dotnet new webapp -au Individual
aynı işlemi yapabilirsiniz. Uygulama oluşturulduktan sonra uygulamayı çalıştırın ve siteye kaydolun. Aşağıda gösterilen sayfaya benzer bir sayfa tetiklemelisiniz:
"Geçişleri Uygula" düğmesine tıkladığınızda sizin için gerekli veritabanı tabloları oluşturulmalıdır. Ayrıca, geçiş dosyaları aşağıdaki gibi projenizde görünmelidir:
Bu komut satırı aracını kullanarak, web uygulamasını çalıştırmadan geçişi kendiniz çalıştırabilirsiniz:
dotnet ef database update
Yeni şemayı var olan bir veritabanına uygulamak için bir betik çalıştırmayı tercih ederseniz, bu geçişleri komut satırından betik olarak yazabilirsiniz. Betiği oluşturmak için şu komutu çalıştırın:
dotnet ef migrations script -o auth.sql
Yukarıdaki komut çıktı dosyasında auth.sql
bir SQL betiği oluşturur ve bu betik istediğiniz veritabanında çalıştırılabilir. Komutları çalıştırırken dotnet ef
sorun yaşıyorsanız sisteminizde EF Core araçlarının yüklü olduğundan emin olun.
Kaynak tablolarınızda ek sütunlar olması durumunda, yeni şemada bu sütunlar için en iyi konumu belirlemeniz gerekir. Genellikle tabloda bulunan aspnet_Membership
sütunlar tabloyla AspNetUsers
eşlenmelidir. üzerindeki aspnet_Roles
sütunlar ile AspNetRoles
eşlenmelidir. Tablodaki aspnet_UsersInRoles
ek sütunlar tabloya AspNetUserRoles
eklenir.
Ayrıca ek sütunları ayrı tablolara yerleştirmeyi de göz önünde bulundurmanız faydalı olabilir. Böylece, gelecekteki geçişlerin varsayılan kimlik şemasının bu tür özelleştirmelerini hesaba katması gerekmez.
Evrensel sağlayıcılardan ASP.NET Çekirdek Kimliğe veri geçirme
Hedef tablo şemasını hazırladıktan sonra, sonraki adım kullanıcı ve rol kayıtlarınızı yeni şemaya geçirmektir. Hangi sütunların hangi yeni sütunlara eşlendiği de dahil olmak üzere şema farklılıklarının tam listesi için bkz . ASP.NET Üyelik kimlik doğrulamasından ASP.NET Core 2.0 Kimliğine geçirme.
Kullanıcılarınızı üyelikten yeni kimlik tablolarına geçirmek için, ASP.NET Üyelik kimlik doğrulamasından ASP.NET Core 2.0 Kimliğine geçiş bölümünde açıklanan adımları izleyin. Bu adımları ve sağlanan betiği takip ettikten sonra, kullanıcılarınızın bir sonraki oturum açışında parolalarını değiştirmeleri gerekir.
Kullanıcı parolalarını geçirmek mümkündür, ancak işlem çok daha karmaşıktır. Kullanıcıların geçiş işleminin bir parçası olarak parolalarını güncelleştirmelerini ve onları yeni, benzersiz parolalar kullanmaya teşvik etmelerini gerektirmek, uygulamanın genel güvenliğini artırma olasılığı yüksektir.
Web.config'den uygulama başlatmaya güvenlik ayarlarını geçirme
Daha önce belirtildiği gibi, ASP.NET üyelik ve rol sağlayıcıları uygulamanın web.config
dosyasında yapılandırılır. ASP.NET Core uygulamaları IIS'ye bağlı olmadığından ve yapılandırma için ayrı bir sistem kullandığından, bu ayarların başka bir yerde yapılandırılması gerekir. Çoğunlukla Program.cs dosyasında ASP.NET Temel Kimlik yapılandırılır. Daha önce oluşturulan web projesini açın (kimlik tablosu şemasını oluşturmak için) ve Program.cs (veya Startup.cs) dosyasını gözden geçirin.
Bu kod EF Core ve Identity için destek ekler:
// Add services to the container.
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>();
AddDefaultIdentity
Uzantı yöntemi, Identity'i varsayılan ApplicationDbContext
ve çerçevenin IdentityUser
türünü kullanacak şekilde yapılandırmak için kullanılır. Özel IdentityUser
kullanıyorsanız, türünü burada belirttiğinizden emin olun. Bu uzantı yöntemleri uygulamanızda çalışmıyorsa, uygun using
yönergelere sahip olup olmadığınızı ve gerekli NuGet paket başvurularına sahip olup olmadığınızı denetleyin. Örneğin, projenizde başvuruda bulunan ve Microsoft.AspNetCore.Identity.EntityFrameworkCore
paketlerinin Microsoft.AspNetCore.Identity.UI
bir sürümü olmalıdır.
Ayrıca Program.cs site için yapılandırılmış gerekli ara yazılımı görmeniz gerekir. Ve özel UseAuthentication
UseAuthorization
olarak ve doğru konumda ayarlanmalıdır.
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
//app.MapControllers();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
ASP.NET Kimliği, Program.cs konumlara anonim veya rol tabanlı erişim yapılandırmaz. Konuma özgü yetkilendirme yapılandırma verilerini ASP.NET Core'daki filtrelere geçirmeniz gerekir. Hangi klasörlerin ve sayfaların bu tür güncelleştirmeler gerektirdiğini not edin. Bu değişiklikleri sonraki bölümde yapacaksınız.
tek tek sayfaları ASP.NET Çekirdek Kimlik soyutlamalarını kullanacak şekilde güncelleştirme
ASP.NET Web Forms uygulamanızda anonim kullanıcılara belirli sayfalara veya klasörlere erişimi reddetme ayarlarınız varsa web.config
, bu tür sayfalara özniteliğini ekleyerek [Authorize]
bu değişiklikleri geçirirsiniz:
@attribute [Authorize]
Belirli bir role ait kullanıcılar dışında erişimi daha fazla engellediyseniz, aynı şekilde bir rol belirten bir öznitelik ekleyerek bu davranışı geçirirsiniz:
@attribute [Authorize(Roles ="administrators")]
[Authorize]
özniteliği yalnızca Yönlendirici aracılığıyla ulaşılan bileşenlerde @page
Blazor çalışır. özniteliği alt bileşenlerle çalışmaz ve bunun yerine kullanmalıdır AuthorizeView
.
Belirli bir kullanıcıya kod görüntülenip görüntülenmeyeceğini belirlemek için sayfa işaretlemesi içinde mantığınız varsa, bunu bileşeniyle AuthorizeView
değiştirebilirsiniz.
AuthorizeView bileşeni, kullanıcının kullanıcı arabirimini görme yetkisi olup olmadığına bağlı olarak kullanıcı arabirimini seçmeli olarak görüntüler. Ayrıca, kullanıcı bilgilerine erişmek için kullanılabilecek bir context
değişkeni de kullanıma sunar.
<AuthorizeView>
<Authorized>
<h1>Hello, @context.User.Identity.Name!</h1>
<p>You can only see this content if you are authenticated.</p>
</Authorized>
<NotAuthorized>
<h1>Authentication Failure!</h1>
<p>You are not signed in.</p>
</NotAuthorized>
</AuthorizeView>
Kullanıcıya özniteliğiyle Task<AuthenticationState
yapılandırılmış bir [CascadingParameter]
kullanıcıdan erişerek yordam mantığı içinde kimlik doğrulama durumuna erişebilirsiniz. Bu yapılandırma, kullanıcının kimliğinin doğrulanıp doğrulanmadığını ve belirli bir role ait olup olmadığını belirlemenize olanak tanıyan kullanıcıya erişmenizi sağlayacaktır. bir ilkeyi yordamlı olarak değerlendirmeniz gerekiyorsa, öğesinin IAuthorizationService
bir örneğini ekleyebilir ve yöntemini buna çağırabilirsiniz AuthorizeAsync
. Aşağıdaki örnek kod, kullanıcı bilgilerinin nasıl alınıp yetkili bir kullanıcının ilke tarafından kısıtlanmış bir görevi gerçekleştirmesine izin verebileceğinizi content-editor
gösterir.
@using Microsoft.AspNetCore.Authorization
@inject IAuthorizationService AuthorizationService
<button @onclick="@DoSomething">Do something important</button>
@code {
[CascadingParameter]
private Task<AuthenticationState> authenticationStateTask { get; set; }
private async Task DoSomething()
{
var user = (await authenticationStateTask).User;
if (user.Identity.IsAuthenticated)
{
// Perform an action only available to authenticated (signed-in) users.
}
if (user.IsInRole("admin"))
{
// Perform an action only available to users in the 'admin' role.
}
if ((await AuthorizationService.AuthorizeAsync(user, "content-editor"))
.Succeeded)
{
// Perform an action only available to users satisfying the
// 'content-editor' policy.
}
}
}
Bunun AuthenticationState
gibi basamaklı bir parametreye bağlanabilmesi için önce basamaklı değer olarak ayarlanması gerekir. Bu genellikle bileşeni kullanılarak CascadingAuthenticationState
yapılır. Bu yapılandırma genellikle içinde App.razor
yapılır:
<CascadingAuthenticationState>
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData"
DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
</CascadingAuthenticationState>
Özet
Blazor ASP.NET Core Identity olan ASP.NET Core ile aynı güvenlik modelini kullanır. Özgün veri şemasına çok fazla özelleştirme uygulanmadığı varsayılarak evrensel sağlayıcılardan ASP.NET Çekirdek Kimliğe geçiş oldukça basittir. Veriler geçirildikten sonra, uygulamalarda kimlik doğrulaması ve yetkilendirme Blazor ile çalışmak, yapılandırılabilir ve çoğu güvenlik gereksinimi için programlı destekle iyi belgelenmiştir.