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.
Not
Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 10 sürümüne bakın.
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.
Bu makalede özel kimlik doğrulama durumu sağlayıcısı oluşturma ve kodda kullanıcı kimlik doğrulaması durumu değişiklik bildirimleri alma işlemleri açıklanmaktadır.
Sunucu tarafı ve istemci tarafı Blazor uygulamaları için genel yaklaşımlar benzerdir ancak tam uygulamalarında farklılık gösterir, bu nedenle bu makale sunucu tarafı uygulamalarla istemci tarafı BlazorBlazor uygulamaları arasında özetlenir. Makalenin özetini üzerinde çalıştığınız proje türüyle Blazor eşleşecek şekilde değiştirmek için makalenin üst kısmındaki özet seçiciyi kullanın:
- Sunucu tarafı Blazor uygulamaları (Server özet): Blazor Server .NET 7 veya öncesi için ve .NET 8 veya üzeri için bir Blazor Web App sunucu projesi.
- İstemci tarafı Blazor uygulamaları (Blazor WebAssembly özet): Blazor WebAssembly .NET'in tüm sürümleri için veya .NET 8 veya
.Clientüzeri için bir Blazor Web App projesi için.
Soyut AuthenticationStateProvider sınıf
Çerçeve, Blazor aşağıdaki üyelere sahip geçerli kullanıcının kimlik doğrulama durumu hakkında bilgi sağlayan soyut AuthenticationStateProvider bir sınıf içerir:
- GetAuthenticationStateAsync: Geçerli kullanıcının kimlik doğrulama durumunu zaman uyumsuz olarak alır.
- AuthenticationStateChanged: Kimlik doğrulama durumu değiştiğinde bildirim sağlayan bir olay. Örneğin, bir kullanıcı uygulamada oturum açtığında veya uygulamada oturum açtığında bu olay tetiklenebilir.
- NotifyAuthenticationStateChanged: Kimlik doğrulama durumu değiştirilmiş olayı oluşturur.
Özel AuthenticationStateProvider uygulama
Uygulamanın, uygulamalar için kimlik doğrulaması ve yetkilendirme desteği sağlayan NuGet paketineMicrosoft.AspNetCore.Components.Authorization başvurması Blazor gerekir.
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.
Dosyada aşağıdaki kimlik doğrulama, yetkilendirme ve basamaklı kimlik doğrulama durumu hizmetlerini Program yapılandırın.
Kimlik doğrulaması etkinleştirilmiş proje şablonlarından birinden Blazor uygulama Blazor oluşturduğunuzda, uygulama, kimlik doğrulama durumunu basamaklı parametre olarak göstermeyi içeren aşağıdaki hizmet kayıtlarıyla önceden yapılandırılır. Daha fazla bilgi için makalenin Blazor yetkisiz içeriği özelleştirme bölümünde sunulan ek bilgilerle ASP.NET Çekirdek kimlik doğrulaması ve yetkilendirme bölümüne Router bakın.
using Microsoft.AspNetCore.Components.Authorization;
...
builder.Services.AddAuthorization();
builder.Services.AddCascadingAuthenticationState();
Dosyada Program kimlik doğrulama ve yetkilendirme hizmetlerini yapılandırın.
Kimlik doğrulaması etkinleştirilmiş proje şablonlarından birinden Blazor uygulama Blazor oluşturduğunuzda, uygulama aşağıdaki hizmet kaydını içerir.
using Microsoft.AspNetCore.Components.Authorization;
...
builder.Services.AddAuthorization();
içinde Startup.ConfigureServicesStartup.cskimlik doğrulama ve yetkilendirme hizmetlerini yapılandırın.
Kimlik doğrulaması etkinleştirilmiş proje şablonlarından birinden Blazor uygulama Blazor oluşturduğunuzda, uygulama aşağıdaki hizmet kaydını içerir.
using Microsoft.AspNetCore.Components.Authorization;
...
services.AddAuthorization();
Blazor WebAssembly Uygulamalarda (tüm .NET sürümleri) veya .Client bir Blazor Web App (.NET 8 veya üzeri) projesinde, dosyada Program kimlik doğrulaması, yetkilendirme ve basamaklı kimlik doğrulaması durum hizmetlerini yapılandırın.
Kimlik doğrulaması etkinleştirilmiş proje şablonlarından birinden Blazor uygulama Blazor oluşturduğunuzda, uygulama, kimlik doğrulama durumunu basamaklı parametre olarak göstermeyi içeren aşağıdaki hizmet kayıtlarıyla önceden yapılandırılır. Daha fazla bilgi için makalenin Blazor yetkisiz içeriği özelleştirme bölümünde sunulan ek bilgilerle ASP.NET Çekirdek kimlik doğrulaması ve yetkilendirme bölümüne Router bakın.
using Microsoft.AspNetCore.Components.Authorization;
...
builder.Services.AddAuthorizationCore();
builder.Services.AddCascadingAuthenticationState();
Dosyada Program kimlik doğrulama ve yetkilendirme hizmetlerini yapılandırın.
Kimlik doğrulaması etkinleştirilmiş proje şablonlarından birinden Blazor uygulama Blazor oluşturduğunuzda, uygulama aşağıdaki hizmet kaydını içerir.
using Microsoft.AspNetCore.Components.Authorization;
...
builder.Services.AddAuthorizationCore();
Kullanıcının kimlik doğrulama durumunu oluşturmak için alt sınıf AuthenticationStateProvider ve geçersiz kılma GetAuthenticationStateAsync . Aşağıdaki örnekte, tüm kullanıcıların kimliği kullanıcı adıyla mrfibulidoğrulanır.
CustomAuthStateProvider.cs:
using System.Security.Claims;
using Microsoft.AspNetCore.Components.Authorization;
public class CustomAuthStateProvider : AuthenticationStateProvider
{
public override Task<AuthenticationState> GetAuthenticationStateAsync()
{
var identity = new ClaimsIdentity(
[
new Claim(ClaimTypes.Name, "mrfibuli"),
], "Custom Authentication");
var user = new ClaimsPrincipal(identity);
return Task.FromResult(new AuthenticationState(user));
}
}
Not
Yeni ClaimsIdentity bir kod oluşturan önceki kod, C# 12 (.NET 8) ile sunulan basitleştirilmiş koleksiyon başlatmayı kullanır. Daha fazla bilgi için bkz . Koleksiyon ifadeleri - C# dil başvurusu.
Hizmet CustomAuthStateProvider dosyaya Program kaydedilir. kapsamınakaydedin:
builder.Services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();
Bir Blazor Server uygulamada, çağrısından sonraAddScopedkaydedin:
builder.Services.AddServerSideBlazor();
builder.Services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();
Bir Blazor Server uygulamada, çağrısından sonraAddScopedkaydedin:
services.AddServerSideBlazor();
services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();
Hizmet CustomAuthStateProvider dosyaya Program kaydedilir. hizmet singleton'ını ile AddSingletonkaydedin:
builder.Services.AddSingleton<AuthenticationStateProvider, CustomAuthStateProvider>();
Yoksa, ad alanını bileşenler arasında kullanılabilir hale getirmek için dosyaya @using bir _Imports.razor deyim Microsoft.AspNetCore.Components.Authorization ekleyin:
@using Microsoft.AspNetCore.Components.Authorization;
Yol görünümü bileşenini, bileşen tanımında bir AuthorizeRouteView olarak Router onaylayın veya değiştirin. Bileşenin Router konumu, uygulama türüne bağlı olarak değişir. Projedeki konumunun farkında değilseniz bileşeni bulmak için aramayı kullanın.
<Router ...>
<Found ...>
<AuthorizeRouteView RouteData="routeData"
DefaultLayout="typeof(Layout.MainLayout)" />
...
</Found>
</Router>
Not
Kimlik doğrulaması etkinleştirilmiş proje şablonlarından birinden Blazor uygulama Blazor oluşturduğunuzda, uygulama bileşeni içerirAuthorizeRouteView. Daha fazla bilgi için makalenin Blazor yetkisiz içeriği özelleştirme bölümünde sunulan ek bilgilerle ASP.NET Çekirdek kimlik doğrulaması ve yetkilendirme bölümüne Router bakın.
Bileşenin Router bulunduğu yer:
- Yol görünümü bileşenini onaylayın veya olarak AuthorizeRouteViewdeğiştirin.
- Bileşeni onaylayın veya bileşenin çevresine CascadingAuthenticationState ekleyinRouter.
Bileşenin Router konumu, uygulama türüne bağlı olarak değişir. Projedeki konumunun farkında değilseniz bileşeni bulmak için aramayı kullanın.
<CascadingAuthenticationState>
<Router ...>
<Found ...>
<AuthorizeRouteView RouteData="routeData"
DefaultLayout="typeof(MainLayout)" />
...
</Found>
</Router>
</CascadingAuthenticationState>
Not
Kimlik doğrulaması etkinleştirilmiş proje şablonlarından birinden uygulama Blazor oluşturduğunuzda, uygulama ve Blazor bileşenlerini içerirAuthorizeRouteView.CascadingAuthenticationState Daha fazla bilgi için makalenin Blazor yetkisiz içeriği özelleştirme bölümünde sunulan ek bilgilerle ASP.NET Çekirdek kimlik doğrulaması ve yetkilendirme bölümüne Router bakın.
Aşağıdaki örnek AuthorizeView bileşen, kimliği doğrulanmış kullanıcının adını gösterir:
<AuthorizeView>
<Authorized>
<p>Hello, @context.User.Identity?.Name!</p>
</Authorized>
<NotAuthorized>
<p>You're not authorized.</p>
</NotAuthorized>
</AuthorizeView>
kullanımıyla AuthorizeViewilgili yönergeler için bkz . ASP.NET Çekirdek Blazor kimlik doğrulaması ve yetkilendirme.
Kimlik doğrulama durumu değişiklik bildirimleri
Bir özel AuthenticationStateProvider , tüketicilere kimlik doğrulama durumu değişikliğinin rerender olarak bildirilmesi için temel sınıfta çağrılabilir NotifyAuthenticationStateChangedAuthenticationStateProvider .
Aşağıdaki örnek, bu makalenin önceki bölümlerinde yer alan Özel AuthenticationStateProvider uygulama bölümündeki yönergeleri izleyerek özel AuthenticationStateProvider uygulama işlemini temel alır. Bu bölümdeki yönergeleri izlediyseniz, aşağıdaki CustomAuthStateProvider bölümde gösterilenin yerini alır.
Aşağıdaki CustomAuthStateProvider uygulama, AuthenticateUserbir kullanıcıda oturum açmak ve tüketicilere kimlik doğrulama durumu değişikliğini bildirmek için özel bir yöntemi kullanıma sunar.
CustomAuthStateProvider.cs:
using System.Security.Claims;
using Microsoft.AspNetCore.Components.Authorization;
public class CustomAuthStateProvider : AuthenticationStateProvider
{
public override Task<AuthenticationState> GetAuthenticationStateAsync()
{
var identity = new ClaimsIdentity();
var user = new ClaimsPrincipal(identity);
return Task.FromResult(new AuthenticationState(user));
}
public void AuthenticateUser(string userIdentifier)
{
var identity = new ClaimsIdentity(
[
new Claim(ClaimTypes.Name, userIdentifier),
], "Custom Authentication");
var user = new ClaimsPrincipal(identity);
NotifyAuthenticationStateChanged(
Task.FromResult(new AuthenticationState(user)));
}
}
Not
Yeni ClaimsIdentity bir kod oluşturan önceki kod, C# 12 (.NET 8) ile sunulan basitleştirilmiş koleksiyon başlatmayı kullanır. Daha fazla bilgi için bkz . Koleksiyon ifadeleri - C# dil başvurusu.
Bir bileşende:
- öğesini ekleme AuthenticationStateProvider.
- Kullanıcının tanımlayıcısını tutmak için bir alan ekleyin.
- öğesinin yayınını AuthenticationStateProvider yapmak ve kullanıcının tanımlayıcısıyla çağırmak
CustomAuthStateProvideriçinAuthenticateUserbir düğme ve yöntem ekleyin.
@inject AuthenticationStateProvider AuthenticationStateProvider
<input @bind="userIdentifier" />
<button @onclick="SignIn">Sign in</button>
<AuthorizeView>
<Authorized>
<p>Hello, @context.User.Identity?.Name!</p>
</Authorized>
<NotAuthorized>
<p>You're not authorized.</p>
</NotAuthorized>
</AuthorizeView>
@code {
public string userIdentifier = string.Empty;
private void SignIn()
{
((CustomAuthStateProvider)AuthenticationStateProvider)
.AuthenticateUser(userIdentifier);
}
}
Önceki yaklaşım, özel bir hizmet aracılığıyla kimlik doğrulama durumu değişiklikleri bildirimlerini tetikleme amacıyla geliştirilebilir. Aşağıdaki CustomAuthenticationService sınıf, geçerli kullanıcının talep sorumlusunu kimlik doğrulama durumu sağlayıcısının abone olabileceği bir olayla (currentUser) bir yedekleme alanında (UserChanged) tutar ve olay tarafından çağrılır NotifyAuthenticationStateChanged. Bu bölümün devamında ek yapılandırmayla, CustomAuthenticationService öğesini olayı tetiklemesi CurrentUser için ayarlayan UserChanged mantığı olan bir bileşene eklenebilir.
CustomAuthenticationService.cs:
using System.Security.Claims;
public class CustomAuthenticationService
{
public event Action<ClaimsPrincipal>? UserChanged;
private ClaimsPrincipal? currentUser;
public ClaimsPrincipal CurrentUser
{
get { return currentUser ?? new(); }
set
{
currentUser = value;
if (UserChanged is not null)
{
UserChanged(currentUser);
}
}
}
}
Program dosyasında, bağımlılık ekleme kapsayıcısında öğesini CustomAuthenticationService kaydedin:
builder.Services.AddScoped<CustomAuthenticationService>();
Startup.ConfigureServicesiçinde Startup.cs öğesini bağımlılık ekleme kapsayıcısında kaydedinCustomAuthenticationService:
services.AddScoped<CustomAuthenticationService>();
Program dosyasında, bağımlılık ekleme kapsayıcısında öğesini CustomAuthenticationService kaydedin:
builder.Services.AddSingleton<CustomAuthenticationService>();
Aşağıdakiler CustomAuthStateProvider olaya abonedir CustomAuthenticationService.UserChanged .
GetAuthenticationStateAsync yöntemi, kullanıcının kimlik doğrulama durumunu döndürür. Başlangıçta, kimlik doğrulama durumu değerini CustomAuthenticationService.CurrentUsertemel alır. Kullanıcı değiştiğinde, çağrısı için yeni kullanıcı (new AuthenticationState(newUser)) için GetAuthenticationStateAsyncyeni bir kimlik doğrulama durumu oluşturulur:
using Microsoft.AspNetCore.Components.Authorization;
public class CustomAuthStateProvider : AuthenticationStateProvider
{
private AuthenticationState authenticationState;
public CustomAuthStateProvider(CustomAuthenticationService service)
{
authenticationState = new AuthenticationState(service.CurrentUser);
service.UserChanged += (newUser) =>
{
authenticationState = new AuthenticationState(newUser);
NotifyAuthenticationStateChanged(Task.FromResult(authenticationState));
};
}
public override Task<AuthenticationState> GetAuthenticationStateAsync() =>
Task.FromResult(authenticationState);
}
Aşağıdaki bileşenin SignIn yöntemi, kullanıcının tanımlayıcısının üzerinde CustomAuthenticationService.CurrentUserayarlanacağı bir talep sorumlusu oluşturur:
@using System.Security.Claims
@inject CustomAuthenticationService AuthService
<input @bind="userIdentifier" />
<button @onclick="SignIn">Sign in</button>
<AuthorizeView>
<Authorized>
<p>Hello, @context.User.Identity?.Name!</p>
</Authorized>
<NotAuthorized>
<p>You're not authorized.</p>
</NotAuthorized>
</AuthorizeView>
@code {
public string userIdentifier = string.Empty;
private void SignIn()
{
var currentUser = AuthService.CurrentUser;
var identity = new ClaimsIdentity(
[
new Claim(ClaimTypes.Name, userIdentifier),
],
"Custom Authentication");
var newUser = new ClaimsPrincipal(identity);
AuthService.CurrentUser = newUser;
}
}
Not
Yeni ClaimsIdentity bir kod oluşturan önceki kod, C# 12 (.NET 8) ile sunulan basitleştirilmiş koleksiyon başlatmayı kullanır. Daha fazla bilgi için bkz . Koleksiyon ifadeleri - C# dil başvurusu.
Ek kaynaklar
-
Sunucu tarafı yetkisiz içerik, özel bir içerikle önceden giriş yaparken görüntüleniyor
AuthenticationStateProvider -
Kullanarak bir
AuthenticationStateProviderkurulumdan erişimDelegatingHandlerIHttpClientFactory - OpenID Connect (OIDC) ile ASP.NET Çekirdeğin Blazor Web App güvenliğini sağlama
- ASP.NET Core Blazor WebAssembly ile güvenli ASP.NET Çekirdek Identity
-
Sunucu tarafı yetkisiz içerik, özel bir içerikle önceden giriş yaparken görüntüleniyor
AuthenticationStateProvider -
Kullanarak bir
AuthenticationStateProviderkurulumdan erişimDelegatingHandlerIHttpClientFactory - OpenID Connect (OIDC) ile ASP.NET Çekirdeğin Blazor Web App güvenliğini sağlama
- Blazor WebAssembly Identity
ASP.NET Core