ASP.NET Çekirdek Blazor kimlik doğrulama durumu
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 8 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ı Blazor Blazor 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 paketineBlazor başvurması Microsoft.AspNetCore.Components.Authorization
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 Bileşenle yetkisiz içeriği özelleştirme bölümünde sunulan ek bilgilerle ASP.NET Çekirdek Blazor 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.ConfigureServices
Startup.cs
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;
...
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 Bileşenle yetkisiz içeriği özelleştirme bölümünde sunulan ek bilgilerle ASP.NET Çekirdek Blazor 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 mrfibuli
doğ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ına AddScopedsahip hizmeti kaydedin:
builder.Services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();
Bir Blazor Server uygulamada, çağrısından AddServerSideBlazorsonra kapsamı belirlenmiş AddScoped hizmeti kaydedin:
builder.Services.AddServerSideBlazor();
builder.Services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();
Bir Blazor Server uygulamada, çağrısından AddServerSideBlazorsonra kapsamı belirlenmiş AddScoped hizmeti kaydedin:
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 Microsoft.AspNetCore.Components.Authorization bir @using
deyim _Imports.razor
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 Bileşenle yetkisiz içeriği özelleştirme bölümünde sunulan ek bilgilerle ASP.NET Çekirdek Blazor 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 Router ekleyinCascadingAuthenticationState.
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 CascadingAuthenticationState bileşenlerini içerirAuthorizeRouteView.Blazor Daha fazla bilgi için makalenin Bileşenle yetkisiz içeriği özelleştirme bölümünde sunulan ek bilgilerle ASP.NET Çekirdek Blazor 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 NotifyAuthenticationStateChanged AuthenticationStateProvider .
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, AuthenticateUser
bir 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
AuthenticateUser
içinCustomAuthStateProvider
bir 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 UserChanged
için ayarlayan CurrentUser
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.cs
içinde Startup.ConfigureServices
öğ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.CurrentUser
temel alır. Kullanıcı değiştiğinde, çağrısı için yeni kullanıcı (new AuthenticationState(newUser)
) için GetAuthenticationStateAsync
yeni 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.CurrentUser
ayarlanacağı 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
DelegatingHandler
kurulumdan erişimAuthenticationStateProvider
IHttpClientFactory
- 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
DelegatingHandler
kurulumdan erişimAuthenticationStateProvider
IHttpClientFactory
- OpenID Connect (OIDC) ile ASP.NET Çekirdeğin Blazor Web App güvenliğini sağlama
- Barındırılan Blazor WebAssembly Blazor WebAssembly uygulamalarda kimlik doğrulaması ile ASP.NET Core Ön ASP.NET Core Identitygüvenliğini sağlama
ASP.NET Core