Microsoft Entra ID ile barındırılan ASP.NET Core Blazor WebAssembly uygulamasının güvenliğini sağlama
Bu makalede, kimlik doğrulaması için Microsoft Entra Id (ME-ID) kullanan barındırılan Blazor WebAssembly bir çözümün nasıl oluşturulacağı açıklanmaktadır. Bu makale, tek kiracılı Azure uygulama kaydına sahip tek bir kiracı uygulamasına odaklanır.
Bu makale, çok kiracılı ME-ID kaydını kapsamaz. Daha fazla bilgi için bkz . Uygulamanızı çok kiracılı hale getirme.
Bu makale, Hızlı Başlangıç: Kiracı ayarlama bölümünde açıklandığı gibi bir Microsoft Entra kiracısının kullanımına odaklanır. Uygulama, Öğretici: Azure Active Directory B2C kiracısı oluşturma başlığı altında açıklandığı gibi bir Azure Active Directory B2C kiracısında kayıtlıysa ancak bu makaledeki yönergeleri izlerse, Uygulama Kimliği URI'si ME-ID tarafından farklı yönetilir. Daha fazla bilgi için bu makalenin Azure Active Directory B2C kiracısının kullanımı bölümüne bakın.
Bu makaleyi okuduktan sonra ek güvenlik senaryosu kapsamı için bkz . ASP.NET Çekirdek Blazor WebAssembly ek güvenlik senaryoları.
İzlenecek yol
İzlenecek kılavuzun alt bölümlerinde aşağıdakilerin nasıl yapılacağı açıklanmaktadır:
- Azure'da kiracı oluşturma
- Azure'da sunucu API'sini kaydetme
- Azure'da istemci uygulaması kaydetme
- Blazor Uygulamayı oluşturma
- Yapılandırmayı Server
appsettings.json
değiştirme - Varsayılan erişim belirteci kapsam düzenini değiştirme
- Uygulamayı çalıştırma
Azure'da kiracı oluşturma
Hızlı Başlangıç: ME-ID'de kiracı oluşturmak için kiracı ayarlama bölümünde yer alan yönergeleri izleyin.
Azure'da sunucu API'sini kaydetme
Sunucu API'si uygulaması için bir ME-ID uygulaması kaydedin:
- Azure portalında Microsoft Entra Kimliği'ne gidin. Kenar çubuğunda Uygulamalar> Uygulama kayıtları'ı seçin. Yeni kayıt düğmesini seçin.
- Uygulama için bir Ad sağlayın (örneğin, Blazor Server ME-ID).
- Desteklenen hesap türlerini seçin. Bu deneyim için yalnızca bu kuruluş dizininde (tek kiracı) Hesaplar'ı seçebilirsiniz.
- Sunucu API'sinin bu senaryoda Yeniden Yönlendirme URI'sini gerektirmediğinden, Platform seçin açılan listesini seçili durumdan çıkarın ve yeniden yönlendirme URI'sini girmeyin.
- Bu makalede, uygulamanın bir Microsoft Entra kiracısında kayıtlı olduğu varsayılır. Uygulama bir Azure Active Directory B2C kiracısında kayıtlıysa, Openid>ve offline_access izinlerine yönetici onayı ver onay kutusu mevcut ve seçilidir. Ayarı devre dışı bırakmak için onay kutusunun seçimini kaldırın. Active Azure Directory kiracısı kullanılırken onay kutusu mevcut değildir.
- Kaydet'i seçin.
Aşağıdaki bilgileri kaydedin:
- Sunucu API'si uygulama uygulaması (istemci) kimliği (örneğin,
00001111-aaaa-2222-bbbb-3333cccc4444
) - Dizin (kiracı) kimliği (örneğin,
aaaabbbb-0000-cccc-1111-dddd2222eeee
) - ME-Id Birincil/Yayımcı/Kiracı etki alanı (örneğin, ): Etki alanı,
contoso.onmicrosoft.com
kayıtlı uygulamanın Azure portalının Markalama dikey penceresinde Yayımcı etki alanı olarak kullanılabilir.
Sunucu API'sinin yalnızca kullanıcılarda oturum açmak ve sunucu API uç noktalarını çağırmak için ek API erişimi gerektirmediğinden API izinlerinde Microsoft Graph>User.Read iznini kaldırın.
BIR API'yi kullanıma sunma bölümünde:
- Uygulama Kimliği URI'sini biçiminde
api://{SERVER API APP CLIENT ID}
onaylayın veya ekleyin. - Yeni bir kapsam ekle'yi seçin.
- Kaydet ve devam et’i seçin.
- Bir Kapsam adı sağlayın (örneğin,
API.Access
). - Bir Yönetici onayı görünen adı sağlayın (örneğin,
Access API
). - Yönetici onayı açıklaması sağlayın (örneğin,
Allows the app to access server app API endpoints.
). - Durumun Etkin olarak ayarlandığını onaylayın.
- Kapsam ekle'yi seçin.
Aşağıdaki bilgileri kaydedin:
- Uygulama Kimliği URI GUID'si (örneğin, uygulamasının Uygulama Kimliği URI'sinden
api://00001111-aaaa-2222-bbbb-3333cccc4444
kayıt00001111-aaaa-2222-bbbb-3333cccc4444
) - Kapsam adı (örneğin,
API.Access
)
Önemli
Uygulama Kimliği URI'si için özel bir değer kullanılıyorsa, uygulamalar proje şablonundan Blazor WebAssembly oluşturulduktan sonra hem ve Client Server uygulamalarında yapılandırma değişiklikleri yapılması gerekir. Daha fazla bilgi için Özel Uygulama Kimliği URI'si kullanma bölümüne bakın.
Azure'da istemci uygulaması kaydetme
İstemci uygulaması için bir ME-ID uygulaması kaydedin:
- Azure portalında Microsoft Entra Kimliği'ne gidin. Kenar çubuğunda Uygulama kayıtları seçin. Yeni kayıt düğmesini seçin.
- Uygulama için bir Ad sağlayın (örneğin, Blazor İstemci ME-Kimliği).
- Desteklenen hesap türlerini seçin. Bu deneyim için yalnızca bu kuruluş dizininde (tek kiracı) Hesaplar'ı seçebilirsiniz.
- Yeniden Yönlendirme URI açılan listesini Tek sayfalı uygulama (SPA) olarak ayarlayın ve aşağıdaki yeniden yönlendirme URI'sini sağlayın:
https://localhost/authentication/login-callback
. Azure varsayılan konağı (örneğin, ) veya özel etki alanı konağı (örneğin,azurewebsites.net
) için üretim yeniden yönlendirme URI'sini biliyorsanız,contoso.com
yeniden yönlendirme URI'sini sağladığınız anda üretim yeniden yönlendirme URI'sinilocalhost
de ekleyebilirsiniz. Eklediğiniz üretim yeniden yönlendirme URI'lerine bağlantı noktası olmayanlar:443
için bağlantı noktası numarasını eklediğinizden emin olun. - Bu makalede, uygulamanın bir Microsoft Entra kiracısında kayıtlı olduğu varsayılır. Uygulama bir Azure Active Directory B2C kiracısında kayıtlıysa, Openid>ve offline_access izinlerine yönetici onayı ver onay kutusu mevcut ve seçilidir. Ayarı devre dışı bırakmak için onay kutusunun seçimini kaldırın. Active Azure Directory kiracısı kullanılırken onay kutusu mevcut değildir.
- Kaydet'i seçin.
Not
ME-ID yeniden yönlendirme URI'si için localhost
bağlantı noktası numarası sağlamak gerekli değildir. Daha fazla bilgi için bkz . Yeniden yönlendirme URI'si (yanıt URL'si) kısıtlamaları ve sınırlamaları: Localhost özel durumları (Entra belgeleri).
Client Uygulama Uygulama (istemci) Kimliğini (örneğin, 11112222-bbbb-3333-cccc-4444dddd5555
) kaydedin.
Kimlik Doğrulama>Platformu yapılandırmaları>Tek sayfalı uygulamada:
- yeniden yönlendirme URI'sinin
https://localhost/authentication/login-callback
mevcut olduğunu onaylayın. - Örtük verme bölümünde, Erişim belirteçleri ve kimlik belirteçleri için onay kutularının seçili olmadığından emin olun. MSAL v2.0 veya üzerini kullanan uygulamalar için Blazor örtük izin verilmesi önerilmez. Daha fazla bilgi için bkz . Secure ASP.NET Core Blazor WebAssembly.
- Uygulamanın kalan varsayılanları bu deneyim için kabul edilebilir.
- Değişiklik yaptıysanız Kaydet düğmesini seçin.
API izinlerinde:
- Uygulamanın Microsoft Graph>User.Read iznine sahip olduğunu onaylayın.
- İzin ekle'yi ve ardından API'lerim'i seçin.
- Ad sütunundan Sunucu API'si uygulamasını seçin (örneğin, Blazor Server ME-ID). API'yi Azure portalının API'lerim alanında görebilmeniz için uygulama kaydının (ve ayrı bir uygulamaysa API uygulama kaydının) sahibi olmanız gerekir. Daha fazla bilgi için bkz . Uygulama sahibi atama (Microsoft Entra belgeleri).
- API listesini açın.
- API'ye erişimi etkinleştirin (örneğin,
API.Access
). - İzinler ekle'yi seçin.
- {TENANT NAME} için yönetici onayı ver düğmesini seçin. Onaylamak için Evet'i seçin.
Önemli
Uygulamayı kullanma onayı kullanıcılara devredildiği için API izinleri yapılandırmasının son adımında kiracıya yönetici onayı verme yetkiniz yoksa aşağıdaki ek adımları uygulamanız gerekir:
- Uygulamanın güvenilir bir yayımcı etki alanı kullanması gerekir.
Server
Uygulamanın Azure portalındaki yapılandırmasında API'yi kullanıma sunma'yı seçin. Yetkili istemci uygulamaları'nın altında İstemci uygulaması ekle düğmesini seçin.Client
Uygulamanın Uygulama (istemci) kimliğini ekleyin (örneğin,11112222-bbbb-3333-cccc-4444dddd5555
).
Blazor Uygulamayı oluşturma
Boş bir klasörde, aşağıdaki komuttaki yer tutucuları daha önce kaydedilen bilgilerle değiştirin ve komutu bir komut kabuğunda yürütür:
dotnet new blazorwasm -au SingleOrg --api-client-id "{SERVER API APP CLIENT ID}" --app-id-uri "{SERVER API APP ID URI GUID}" --client-id "{CLIENT APP CLIENT ID}" --default-scope "{DEFAULT SCOPE}" --domain "{TENANT DOMAIN}" -ho -o {PROJECT NAME} --tenant-id "{TENANT ID}"
Uyarı
OIDC uygulama tanımlayıcısının oluşumunu bozan uygulama adında {PROJECT NAME}
tire (-
) kullanmaktan kaçının. Proje şablonundaki Blazor WebAssembly mantık, çözümün yapılandırmasındaki bir OIDC uygulama tanımlayıcısı için proje adını kullanır. Pascal büyük/küçük harf (BlazorSample
) veya alt çizgi (Blazor_Sample
) kabul edilebilir alternatiflerdir. Daha fazla bilgi için bkz . Barındırılan Blazor WebAssembly proje adı sonu OIDC güvenliğindeki tireler (dotnet/aspnetcore #35337).
Yer tutucu | Azure portal adı | Örnek |
---|---|---|
{PROJECT NAME} |
— | BlazorSample |
{CLIENT APP CLIENT ID} |
Uygulamanın uygulama (istemci) kimliği Client | 11112222-bbbb-3333-cccc-4444dddd5555 |
{DEFAULT SCOPE} |
Kapsam adı | API.Access |
{SERVER API APP CLIENT ID} |
Sunucu API'si uygulaması için uygulama (istemci) kimliği | 00001111-aaaa-2222-bbbb-3333cccc4444 |
{SERVER API APP ID URI GUID} |
Uygulama Kimliği URI GUID'si | 00001111-aaaa-2222-bbbb-3333cccc4444 (YALNIZCA GUID, ile eşleşir {SERVER API APP CLIENT ID} ) |
{TENANT DOMAIN} |
Birincil/Yayımcı/Kiracı etki alanı | contoso.onmicrosoft.com |
{TENANT ID} |
Dizin (kiracı) kimliği | aaaabbbb-0000-cccc-1111-dddd2222eeee |
seçeneğiyle -o|--output
belirtilen çıkış konumu, yoksa bir proje klasörü oluşturur ve proje adının bir parçası olur. OIDC uygulama tanımlayıcısının oluşumunu bozan uygulama adında tire (-
) kullanmaktan kaçının (önceki UYARI bölümüne bakın).
Önemli
Uygulama Kimliği URI'si için özel bir değer kullanılıyorsa, uygulamalar proje şablonundan Blazor WebAssembly oluşturulduktan sonra hem ve Client Server uygulamalarında yapılandırma değişiklikleri yapılması gerekir. Daha fazla bilgi için Özel Uygulama Kimliği URI'si kullanma bölümüne bakın.
Uygulamayı çalıştırma
Uygulamayı projeden Server
çalıştırın. Visual Studio kullanırken, aşağıdakilerden birini yapabilirsiniz:
Çalıştır düğmesinin yanındaki açılan oku seçin. Açılan listeden Başlangıç Projelerini Yapılandır'ı açın. Tek başlangıç projesi seçeneğini belirleyin. Başlangıç projesinin projesini onaylayın veya proje olarak
Server
değiştirin.Server
Aşağıdaki yaklaşımlardan herhangi biriyle uygulamayı başlatmadan önce projenin Çözüm Gezgini vurgulandığını onaylayın:- Çalıştır düğmesini seçin.
- Menüden Hata AyıklamaYı>Başlat Hata Ayıklamayı Kullanın.
- F5 tuşuna basın.
Komut kabuğunda çözümün
Server
proje klasörüne gidin. (veyadotnet run
) komutunu yürütürdotnet watch
.
Yapılandırmak User.Identity.Name
Bu bölümdeki kılavuz isteğe bağlı olarak talepteki değerle doldurmayı User.Identity.Name
name
kapsar.
Uygulama API'si Server User.Identity.Name
, talep türündeki http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
değerle (örneğin, bbbb0000-cccc-1111-dddd-2222eeee3333@contoso.onmicrosoft.com
) doldurulur.
Uygulamayı talep türünden değeri name
alacak şekilde yapılandırmak için:
Dosyasına için Microsoft.AspNetCore.Authentication.JwtBearer
Program
bir ad alanı ekleyin:using Microsoft.AspNetCore.Authentication.JwtBearer;
öğesini TokenValidationParameters.NameClaimType yapılandırın JwtBearerOptions.
builder.Services.Configure<JwtBearerOptions>( JwtBearerDefaults.AuthenticationScheme, options => { options.TokenValidationParameters.NameClaimType = "name"; });
Çözümün parçaları
Bu bölümde, bir çözümün proje şablonundan Blazor WebAssembly oluşturulan bölümleri açıklanır ve çözümün Client ve Server projelerin başvuru için nasıl yapılandırıldığı açıklanır. Uygulamayı İzlenecek Yol bölümündeki yönergeleri kullanarak oluşturduysanız temel bir çalışma uygulaması için bu bölümde izlenecek belirli bir kılavuz yoktur. Bu bölümdeki yönergeler, kullanıcıların kimliğini doğrulamak ve yetkilendirmek için bir uygulamayı güncelleştirmeye yardımcı olur. Ancak, bir uygulamayı güncelleştirmeye alternatif bir yaklaşım, İzlenecek Yol bölümündeki kılavuzdan yeni bir uygulama oluşturmak ve uygulamanın bileşenlerini, sınıflarını ve kaynaklarını yeni uygulamaya taşımaktır.
appsettings.json
yapılandırması
Bu bölüm çözümün uygulamasıyla ilgili.Server
Dosya, appsettings.json
erişim belirteçlerini doğrulamak için kullanılan JWT taşıyıcı işleyicisini yapılandırma seçeneklerini içerir. Aşağıdaki AzureAd
yapılandırma bölümünü ekleyin:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "{TENANT DOMAIN}",
"TenantId": "{TENANT ID}",
"ClientId": "{SERVER API APP CLIENT ID}",
"CallbackPath": "/signin-oidc",
"Scopes": "{SCOPES}"
}
}
Örnek:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "contoso.onmicrosoft.com",
"TenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"CallbackPath": "/signin-oidc",
"Scopes": "API.Access"
}
}
Önemli
Server Uygulama, ME-ID'de (varsayılan biçimde değil) özel bir Uygulama Kimliği URI'si kullanacak şekilde api://{SERVER API APP CLIENT ID}
kayıtlıysa, Özel Uygulama Kimliği URI'si kullanma bölümüne bakın. Hem hem Client de Server uygulamalarında değişiklikler gereklidir.
Kimlik doğrulama paketi
Bu bölüm çözümün uygulamasıyla ilgili.Server
Microsoft identity platformuyla ASP.NET Core web API'lerine yönelik çağrıların kimliğini doğrulama ve yetkilendirme desteği paket tarafından Microsoft.Identity.Web
sağlanır.
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.
Server Şablondan oluşturulan barındırılan Blazor çözümün Blazor WebAssembly uygulaması paketi içerirMicrosoft.Identity.Web.UI
. Paket, web uygulamalarında kullanıcı kimlik doğrulaması için kullanıcı arabirimi ekler ve çerçeve tarafından Blazor kullanılmaz. Server Uygulama kullanıcıların kimliğini doğrudan doğrulamak için kullanılmıyorsa, uygulamanın proje dosyasından paket başvuruyu Server kaldırmak güvenlidir.
Kimlik doğrulama hizmeti desteği
Bu bölüm çözümün uygulamasıyla ilgili.Server
AddAuthentication
yöntemi, uygulama içinde kimlik doğrulama hizmetlerini ayarlar ve JWT Taşıyıcı işleyicisini varsayılan kimlik doğrulama yöntemi olarak yapılandırılır. yöntemi, AddMicrosoftIdentityWebApi Microsoft identity platformu v2.0 ile web API'sini korumak için hizmetleri yapılandırıyor. Bu yöntem, uygulamanın yapılandırmasında kimlik doğrulama seçeneklerini başlatmak için gerekli ayarları içeren bir AzureAd
bölüm bekler.
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd"));
Not
Tek bir kimlik doğrulama düzeni kaydedildiğinde, kimlik doğrulama düzeni otomatik olarak uygulamanın varsayılan şeması olarak kullanılır ve düzenin veya AddAuthentication aracılığıyla AuthenticationOptionsbelirtilmesi gerekmez. Daha fazla bilgi için bkz . ASP.NET Çekirdek Kimlik Doğrulamasına Genel Bakış ve ASP.NET Core duyurusu (aspnet/Announcements #490).
UseAuthentication ve UseAuthorization şu şekilde olduğundan emin olun:
- Uygulama, gelen isteklerde belirteçleri ayrıştırmaya ve doğrulamaya çalışır.
- Korumalı bir kaynağa düzgün kimlik bilgileri olmadan erişmeye çalışan tüm istekler başarısız olur.
app.UseAuthentication();
app.UseAuthorization();
WeatherForecast denetleyici
Bu bölüm çözümün uygulamasıyla ilgili.Server
Denetleyici WeatherForecast
(Controllers/WeatherForecastController.cs
), denetleyiciye uygulanan özniteliğiyle [Authorize]
korumalı bir API'yi kullanıma sunar. Şunu anlamak önemlidir :
[Authorize]
Bu API denetleyicisindeki öznitelik, bu API'yi yetkisiz erişime karşı koruyan tek şeydir.[Authorize]
Uygulamada kullanılan Blazor WebAssembly öznitelik, uygulamaya yalnızca kullanıcının uygulamanın düzgün çalışması için yetkilendirilmiş olması gerektiğini belirten bir ipucu görevi görür.
[Authorize]
[ApiController]
[Route("[controller]")]
[RequiredScope(RequiredScopesConfigurationKey = "AzureAd:Scopes")]
public class WeatherForecastController : ControllerBase
{
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
...
}
}
wwwroot/appsettings.json
yapılandırması
Bu bölüm çözümün uygulamasıyla ilgili.Client
Yapılandırma dosyası tarafından wwwroot/appsettings.json
sağlanır:
{
"AzureAd": {
"Authority": "https://login.microsoftonline.com/{TENANT ID}",
"ClientId": "{CLIENT APP CLIENT ID}",
"ValidateAuthority": true
}
}
Örnek:
{
"AzureAd": {
"Authority": "https://login.microsoftonline.com/e86c78e2-...-918e0565a45e",
"ClientId": "11112222-bbbb-3333-cccc-4444dddd5555",
"ValidateAuthority": true
}
}
Kimlik doğrulama paketi
Bu bölüm çözümün uygulamasıyla ilgili.Client
İş veya Okul Hesaplarını ()SingleOrg
kullanmak üzere bir uygulama oluşturulduğunda, uygulama otomatik olarak Microsoft Kimlik Doğrulama Kitaplığı (Microsoft.Authentication.WebAssembly.Msal
için bir paket başvurusu alır). Paket, uygulamanın kullanıcıların kimliğini doğrulamasına ve korumalı API'leri çağırmak için belirteçleri almasına yardımcı olan bir dizi temel öğe sağlar.
Uygulamaya kimlik doğrulaması ekliyorsanız paketi uygulamaya el ile ekleyin Microsoft.Authentication.WebAssembly.Msal
.
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.
Paket, Microsoft.Authentication.WebAssembly.Msal
paketi uygulamaya geçişli olarak ekler Microsoft.AspNetCore.Components.WebAssembly.Authentication
.
Kimlik doğrulama hizmeti desteği
Bu bölüm çözümün uygulamasıyla ilgili.Client
Uygulamaya istekte bulunurken erişim belirteçlerini içeren örnekler için HttpClient Server destek eklenir.
Program
dosyasında:
builder.Services.AddHttpClient("{PROJECT NAME}.ServerAPI", client =>
client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>()
.CreateClient("{PROJECT NAME}.ServerAPI"));
Yer {PROJECT NAME}
tutucu, çözüm oluşturma sırasındaki proje adıdır. Örneğin, proje adını BlazorSample
sağlamak adlı HttpClient BlazorSample.ServerAPI
bir oluşturur.
Kullanıcıların kimliğini doğrulama desteği, paket tarafından sağlanan uzantı yöntemiyle AddMsalAuthentication hizmet kapsayıcısında Microsoft.Authentication.WebAssembly.Msal
kaydedilir. Bu yöntem, uygulamanın Sağlayıcı (IP) ile Identity etkileşim kurması için gereken hizmetleri ayarlar.
Program
dosyasında:
builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
options.ProviderOptions.DefaultAccessTokenScopes.Add("{SCOPE URI}");
});
yöntemi, AddMsalAuthentication bir uygulamanın kimliğini doğrulamak için gereken parametreleri yapılandırmak için bir geri çağırma kabul eder. Uygulamayı yapılandırmak için gereken değerler, uygulamayı kaydettiğinizde Azure Portal ME-ID yapılandırmasından alınabilir.
Erişim belirteci kapsamları
Bu bölüm çözümün uygulamasıyla ilgili.Client
Varsayılan erişim belirteci kapsamları, aşağıdaki erişim belirteci kapsamlarının listesini temsil eder:
- Oturum açma isteğine dahil.
- Kimlik doğrulamasının hemen ardından erişim belirteci sağlamak için kullanılır.
Dosyaya Program
gerektiğinde ek kapsamlar eklenebilir:
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.DefaultAccessTokenScopes.Add("{SCOPE URI}");
});
ile AdditionalScopesToConsent
ek kapsamlar belirtin:
options.ProviderOptions.AdditionalScopesToConsent.Add("{ADDITIONAL SCOPE URI}");
Not
AdditionalScopesToConsent bir kullanıcı Microsoft Azure'da kayıtlı bir uygulamayı ilk kez kullandığında Microsoft Entra Id onay kullanıcı arabirimi aracılığıyla Microsoft Graph için temsilci kullanıcı izinleri sağlayamaz. Daha fazla bilgi için bkz . ASP.NET Core Blazor WebAssemblyile Graph API'sini kullanma.
Örnek varsayılan erişim belirteci kapsamı:
options.ProviderOptions.DefaultAccessTokenScopes.Add(
"api://00001111-aaaa-2222-bbbb-3333cccc4444/API.Access");
Daha fazla bilgi için Ek senaryolar makalesinin aşağıdaki bölümlerine bakın:
Oturum açma modu
Bu bölüm çözümün uygulamasıyla ilgili.Client
Çerçeve varsayılan olarak açılır oturum açma moduna geçer ve açılır pencere açılamıyorsa yeniden yönlendirme oturum açma moduna geri döner. özelliğini MsalProviderOptions olarak ayarlayarak LoginMode
MSAL'yi yeniden yönlendirme oturum açma modunu kullanacak şekilde redirect
yapılandırın:
builder.Services.AddMsalAuthentication(options =>
{
...
options.ProviderOptions.LoginMode = "redirect";
});
Varsayılan ayar olur popup
ve dize değeri büyük/küçük harfe duyarlı değildir.
Dosyayı içeri aktarır
Bu bölüm çözümün uygulamasıyla ilgili.Client
Ad Microsoft.AspNetCore.Components.Authorization alanı, uygulama genelinde şu dosya aracılığıyla _Imports.razor
kullanılabilir hale getirilir:
@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Microsoft.JSInterop
@using {APPLICATION ASSEMBLY}
@using {APPLICATION ASSEMBLY}.Shared
Dizin sayfası
Bu bölüm çözümün uygulamasıyla ilgili.Client
Dizin sayfası (wwwroot/index.html
) sayfası, JavaScript'te öğesini AuthenticationService
tanımlayan bir betik içerir. AuthenticationService
OIDC protokolünün alt düzey ayrıntılarını işler. Uygulama, kimlik doğrulama işlemlerini gerçekleştirmek için betikte tanımlanan yöntemleri dahili olarak çağırır.
<script src="_content/Microsoft.Authentication.WebAssembly.Msal/AuthenticationService.js"></script>
Uygulama bileşeni
Bu bölüm çözümün uygulamasıyla ilgili.Client
Bileşen App
(App.razor
), uygulamalarda bulunan Blazor Server bileşene App
benzer:
- Bileşen, CascadingAuthenticationState uygulamasının öğesinin ortaya çıkartılmasıyla rest yönetirAuthenticationState.
- Bileşen, AuthorizeRouteView geçerli kullanıcının belirli bir sayfaya erişme yetkisine sahip olduğundan veya bileşeni başka bir şekilde işlendiğinden
RedirectToLogin
emin olur. - Bileşen,
RedirectToLogin
yetkisiz kullanıcıları oturum açma sayfasına yönlendirmeyi yönetir.
ASP.NET Core sürümleri arasında çerçevedeki değişiklikler nedeniyle, Razor bileşen (App.razor
) için App
işaretleme bu bölümde gösterilmez. Belirli bir sürüm için bileşenin işaretlemesini incelemek için aşağıdaki yaklaşımlardan birini kullanın:
Kullanmak istediğiniz ASP.NET Core sürümü için varsayılan Blazor WebAssembly proje şablonundan kimlik doğrulaması için sağlanan bir uygulama oluşturun.
App
Oluşturulan uygulamadaki bileşeni (App.razor
) inceleyin.Başvuru kaynağındaki
App
bileşeni (App.razor
) inceleyin. Dal seçiciden sürümü seçin ve bileşeninProjectTemplates
konumu yıllar içinde değiştiğinden depoApp
klasöründe bileşeni arayın.Not
.NET başvuru kaynağına yönelik belge bağlantıları genellikle deponun varsayılan dalını yükler ve bu dal .NET'in sonraki sürümü için geçerli geliştirmeyi temsil eder. Belirli bir sürümün etiketini seçmek için Dalları veya etiketleri değiştir açılan listesini kullanın. Daha fazla bilgi için bkz. ASP.NET Core kaynak kodunun sürüm etiketini seçme (dotnet/AspNetCore.Docs #26205).
RedirectToLogin bileşeni
Bu bölüm çözümün uygulamasıyla ilgili.Client
Bileşen RedirectToLogin
(RedirectToLogin.razor
):
- Yetkisiz kullanıcıları oturum açma sayfasına yönlendirmeyi yönetir.
- Kullanıcının erişmeye çalıştığı geçerli URL tarafından korunur, böylece kimlik doğrulaması başarılı olursa bu sayfaya döndürülebilir:
- .NET 7 veya sonraki sürümlerde ASP.NET Core'da gezinti geçmişi durumu .
- .NET 6 veya önceki sürümlerde ASP.NET Core'da bir sorgu dizesi.
Başvuru kaynağındaki RedirectToLogin
bileşeni inceleyin. Bileşenin konumu zaman içinde değiştiğinden, bileşeni bulmak için GitHub arama araçlarını kullanın.
Not
.NET başvuru kaynağına yönelik belge bağlantıları genellikle deponun varsayılan dalını yükler ve bu dal .NET'in sonraki sürümü için geçerli geliştirmeyi temsil eder. Belirli bir sürümün etiketini seçmek için Dalları veya etiketleri değiştir açılan listesini kullanın. Daha fazla bilgi için bkz. ASP.NET Core kaynak kodunun sürüm etiketini seçme (dotnet/AspNetCore.Docs #26205).
LoginDisplay bileşeni
Bu bölüm çözümün uygulamasıyla ilgili.Client
Bileşen LoginDisplay
(LoginDisplay.razor
) bileşeninde MainLayout
işlenir (MainLayout.razor
) ve aşağıdaki davranışları yönetir:
- Kimliği doğrulanmış kullanıcılar için:
- Geçerli kullanıcı adını görüntüler.
- ASP.NET Core'da Identitykullanıcı profili sayfasına bir bağlantı sunar.
- Uygulamanın oturumunu kapatmaya ilişkin bir düğme sunar.
- Anonim kullanıcılar için:
- Kaydolma seçeneği sunar.
- Oturum açma seçeneği sunar.
ASP.NET Core sürümleri arasında çerçevedeki değişiklikler nedeniyle, Razor bileşen için LoginDisplay
işaretleme bu bölümde gösterilmez. Belirli bir sürüm için bileşenin işaretlemesini incelemek için aşağıdaki yaklaşımlardan birini kullanın:
Kullanmak istediğiniz ASP.NET Core sürümü için varsayılan Blazor WebAssembly proje şablonundan kimlik doğrulaması için sağlanan bir uygulama oluşturun.
LoginDisplay
Oluşturulan uygulamadaki bileşeni inceleyin.Başvuru kaynağındaki
LoginDisplay
bileşeni inceleyin. Bileşenin konumu zaman içinde değiştiğinden, bileşeni bulmak için GitHub arama araçlarını kullanın. eşittirtrue
içinHosted
şablonlu içerik kullanılır.Not
.NET başvuru kaynağına yönelik belge bağlantıları genellikle deponun varsayılan dalını yükler ve bu dal .NET'in sonraki sürümü için geçerli geliştirmeyi temsil eder. Belirli bir sürümün etiketini seçmek için Dalları veya etiketleri değiştir açılan listesini kullanın. Daha fazla bilgi için bkz. ASP.NET Core kaynak kodunun sürüm etiketini seçme (dotnet/AspNetCore.Docs #26205).
Kimlik doğrulama bileşeni
Bu bölüm çözümün uygulamasıyla ilgili.Client
Bileşen (Pages/Authentication.razor
) tarafından Authentication
oluşturulan sayfa, farklı kimlik doğrulama aşamalarını işlemek için gereken yolları tanımlar.
Bileşen RemoteAuthenticatorView :
- Paket tarafından
Microsoft.AspNetCore.Components.WebAssembly.Authentication
sağlanır. - Kimlik doğrulamasının her aşamasında uygun eylemleri gerçekleştirmeyi yönetir.
@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
<RemoteAuthenticatorView Action="@Action" />
@code {
[Parameter]
public string? Action { get; set; }
}
Not
Null atanabilir başvuru türleri (NTS) ve .NET derleyici null durum statik çözümlemesi .NET 6 veya sonraki sürümlerde ASP.NET Core'da desteklenir. .NET 6'da ASP.NET Core'un yayımlanmasından önce, string
tür null tür ataması (?
) olmadan görünür.
FetchData bileşeni
Bu bölüm çözümün uygulamasıyla ilgili.Client
Bileşen şunların FetchData
nasıl yapılacağını gösterir:
- Erişim belirteci sağlama.
- Sunucu uygulamasında korumalı bir kaynak API'sini çağırmak için erişim belirtecini kullanın.
yönergesi @attribute [Authorize]
, yetkilendirme sistemine bu bileşeni ziyaret etmek için kullanıcının yetkilendirilmiş olması gerektiğini belirtir Blazor WebAssembly . Özniteliğin Client
uygulamada bulunması, sunucudaki API'nin düzgün kimlik bilgileri olmadan çağrılmasını engellemez. Uygulamanın Server
bunları doğru şekilde korumak için uygun uç noktalarda da kullanması [Authorize]
gerekir.
IAccessTokenProvider.RequestAccessToken API'yi çağırma isteğine eklenebilen bir erişim belirteci isteme işlemini üstlenir. Belirteç önbelleğe alınmışsa veya hizmet kullanıcı etkileşimi olmadan yeni bir erişim belirteci sağlayabiliyorsa, belirteç isteği başarılı olur. Aksi takdirde, belirteç isteği deyiminde yakalanan ile AccessTokenNotAvailableExceptiontry-catch
başarısız olur.
İstekte yer alacak gerçek belirteci elde etmek için, uygulamanın çağrısı tokenResult.TryGetToken(out var token)
yaparak isteğin başarılı olup olmadığını denetlemesi gerekir.
İstek başarılı olursa belirteç değişkeni erişim belirteci ile doldurulur. AccessToken.Value Belirtecin özelliği, istek üst bilgisine eklenecek değişmez dizeyi Authorization
kullanıma sunar.
Belirteç, kullanıcı etkileşimi başarısız bir istekle sonuçlanmadan sağlanamıyorsa:
- .NET 7 veya sonraki sürümlerinde ASP.NET Core: Uygulama, erişim belirtecinin yenilenmesine
AccessTokenResult.InteractiveRequestUrl
izin vermek için verilenAccessTokenResult.InteractionOptions
öğesini kullanmaya gider. - .NET 6 veya önceki sürümlerinde ASP.NET Core: Belirteç sonucu bir yeniden yönlendirme URL'si içerir. Bu URL'ye gitmek, kullanıcıyı oturum açma sayfasına ve başarılı bir kimlik doğrulamasından sonra geçerli sayfaya geri götürür.
@page "/fetchdata"
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using {APP NAMESPACE}.Shared
@attribute [Authorize]
@inject HttpClient Http
...
@code {
private WeatherForecast[] forecasts;
protected override async Task OnInitializedAsync()
{
try
{
forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast");
}
catch (AccessTokenNotAvailableException exception)
{
exception.Redirect();
}
}
}
Azure Active Directory B2C kiracısının kullanımı
Uygulama, Öğretici: Azure Active Directory B2C kiracısı oluşturma başlığı altında açıklandığı gibi bir Azure Active Directory B2C kiracısında kayıtlıysa ancak bu makaledeki yönergeleri izlerse, Uygulama Kimliği URI'si ME-ID tarafından farklı yönetilir.
ME-ID kuruluşuna Genel Bakış'ın üst kısmındaki Kiracıları yönet bağlantısını seçerek mevcut bir kiracının kiracı türünü de kontrol edebilirsiniz. Kuruluş için Kiracı türü sütun değerini inceleyin. Bu bölüm, bu makaledeki yönergeleri izleyen ancak Azure Active Directory B2C kiracısında kayıtlı olan uygulamalarla ilgili.
Biçimiyle api://{SERVER API APP CLIENT ID OR CUSTOM VALUE}
eşleşen Uygulama Kimliği URI'si yerine, Uygulama Kimliği URI'si biçimindedir https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}
. Bu fark ve Server uygulama yapılandırmalarını etkilerClient:
Sunucu API'si uygulaması için, uygulama ayarları dosyasındaki (
appsettings.json
) öğesini Azure portalı tarafından sağlanan hedef kitleyle (Uygulama Kimliği URI'si) sonunda eğik çizgi olmadan eşleşecek şekilde ayarlayınAudience
:"Audience": "https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}"
Örnek:
"Audience": "https://contoso.onmicrosoft.com/00001111-aaaa-2222-bbbb-3333cccc4444"
Program
Uygulamanın dosyasındaClient
kapsamın hedef kitlesini (Uygulama Kimliği URI'si) sunucu API'si uygulamasının hedef kitlesiyle eşleşecek şekilde ayarlayın:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}/{DEFAULT SCOPE}");
Önceki kapsamda, Uygulama Kimliği URI'si/izleyici değerin, sonunda eğik çizgi () içermeyen ve kapsam adını (
/
{DEFAULT SCOPE}
) içermeyen bölümüdürhttps://{TENANT}.onmicrosoft.com/{SERVER API APP CLIENT ID OR CUSTOM VALUE}
.Örnek:
options.ProviderOptions.DefaultAccessTokenScopes .Add("https://contoso.onmicrosoft.com/00001111-aaaa-2222-bbbb-3333cccc4444/API.Access");
Önceki kapsamda, Uygulama Kimliği URI'si/izleyici değerin, sonunda eğik çizgi () içermeyen ve kapsam adını (
/
API.Access
) içermeyen bölümüdürhttps://contoso.onmicrosoft.com/00001111-aaaa-2222-bbbb-3333cccc4444
.
Özel Uygulama Kimliği URI'si kullanma
Uygulama Kimliği URI'si özel bir değerse, uygulamadaki varsayılan erişim belirteci kapsam URI'sini Client el ile güncelleştirmeniz ve hedef kitleyi uygulamanın ME-ID yapılandırmasına Server eklemeniz gerekir.
Önemli
varsayılan Uygulama Kimliği URI'si api://{SERVER API APP CLIENT ID}
kullanılırken aşağıdaki yapılandırma gerekli değildir.
Örnek Uygulama Kimliği URI'si urn://custom-app-id-uri
ve kapsam adı API.Access
:
Program
Uygulamanın dosyasındaClient:options.ProviderOptions.DefaultAccessTokenScopes.Add( "urn://custom-app-id-uri/API.Access");
Uygulamanın içine Server yalnızca Uygulama Kimliği URI'si
appsettings.json
içeren ve sondaki eğik çizgi içermeyen birAudience
girdi ekleyin:"Audience": "urn://custom-app-id-uri"
Sorun giderme
Günlük Kaydı
Kimlik doğrulaması için hata ayıklama veya izleme günlüğünü etkinleştirmek içinBlazor WebAssembly, makale sürümü seçicisinin ASP.NET Core 7.0 veya üzeri olarak ayarlandığı ASP.NET Core Blazor günlüğünün İstemci tarafı kimlik doğrulama günlüğü bölümüne bakın.
Sık karşılaşılan hatalar
Uygulamanın veya Identity Sağlayıcının (IP) yanlış yapılandırılması
En yaygın hatalar yanlış yapılandırmadan kaynaklanıyor. Aşağıda birkaç örnek verilmiştir:
- Senaryonun gereksinimlerine bağlı olarak, eksik veya yanlış bir Yetkili, Örnek, Kiracı Kimliği, Kiracı etki alanı, İstemci Kimliği veya Yeniden Yönlendirme URI'si bir uygulamanın istemcilerin kimliğini doğrulamasını engeller.
- Yanlış istek kapsamları istemcilerin sunucu web API'leri uç noktalarına erişmesini engeller.
- Hatalı veya eksik sunucu API'si izinleri istemcilerin sunucu web API'si uç noktalarına erişmesini engeller.
- Uygulamayı IP'nin uygulama kaydının Yeniden Yönlendirme URI'sinde yapılandırılandan farklı bir bağlantı noktasında çalıştırma. Microsoft Entra Kimliği ve geliştirme testi adresinde çalışan bir
localhost
uygulama için bağlantı noktası gerekli değildir, ancak uygulamanın bağlantı noktası yapılandırması ve uygulamanın çalıştırıldığı bağlantı noktası, adres olmayanlarlocalhost
için eşleşmelidir.
Bu makalenin kılavuzunun yapılandırma bölümlerinde doğru yapılandırma örnekleri gösterilir. Uygulama ve IP yanlış yapılandırması olup olmadığını bulmak için makalenin her bölümünü dikkatle denetleyin.
Yapılandırma doğru görünüyorsa:
Uygulama günlüklerini analiz edin.
tarayıcının geliştirici araçlarıyla istemci uygulaması ile IP veya sunucu uygulaması arasındaki ağ trafiğini inceleyin. Genellikle, soruna neyin neden olduğuna dair ipucu içeren tam bir hata iletisi veya ileti, istekte bulunduktan sonra IP veya sunucu uygulaması tarafından istemciye döndürülür. Geliştirici araçları kılavuzu aşağıdaki makalelerde bulunur:
- Google Chrome (Google belgeleri)
- Microsoft Edge
- Mozilla Firefox (Mozilla belgeleri)
JSON Web Belirteci'nin Blazor (JWT) kullanıldığı sürümler için, sorunun oluştuğu yere bağlı olarak istemcinin kimliğini doğrulamak veya sunucu web API'sine erişmek için kullanılan belirtecin içeriğinin kodunu kaldırın. Daha fazla bilgi için bkz . JSON Web Belirtecinin (JWT) içeriğini inceleme.
Belge ekibi makalelerdeki belge geri bildirimlerine ve hatalarına yanıt verir (Bu sayfa geri bildirimi bölümünden bir sorun açın) ancak ürün desteği sağlayamaz. Bir uygulamada sorun gidermeye yardımcı olmak için çeşitli genel destek forumları mevcuttur. Aşağıdakileri öneririz:
Önceki forumlar Microsoft'a ait değildir veya microsoft tarafından denetlenmemektedir.
Güvenlikle ilgili olmayan, hassas olmayan ve gizli olmayan yeniden üretilebilir çerçeve hata raporları için ASP.NET Core ürün birimiyle ilgili bir sorun açın. Sorunun nedenini ayrıntılı bir şekilde araştırıp kendi başınıza ve bir genel destek forumundaki topluluğun yardımıyla çözene kadar ürün birimiyle ilgili bir sorun açmayın. Ürün birimi, basit yanlış yapılandırma veya üçüncü taraf hizmetleri içeren kullanım örnekleri nedeniyle bozulan tek tek uygulamalarda sorun gideremez. Bir rapor doğası gereği hassas veya gizliyse veya siber saldırganların yararlanabileceği üründe olası bir güvenlik açığını açıklıyorsa bkz . Güvenlik sorunlarını ve hatalarını raporlama (
dotnet/aspnetcore
GitHub deposu).ME-ID için yetkisiz istemci
bilgi: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Yetkilendirme başarısız oldu. Bu gereksinimler karşılanmadı: DenyAnonymousAuthorizationRequirement: Kimliği doğrulanmış bir kullanıcı gerektirir.
ME-ID'den oturum açma geri çağırma hatası:
- Hata:
unauthorized_client
- Açıklama:
AADB2C90058: The provided application is not configured to allow public clients.
Hatayı düzeltmek için:
- Azure portalında uygulamanın bildirimine erişin.
- özniteliğini
allowPublicClient
veyatrue
olaraknull
ayarlayın.
- Hata:
Tanımlama bilgileri ve site verileri
Tanımlama bilgileri ve site verileri uygulama güncelleştirmeleri arasında kalıcı olabilir ve test ve sorun gidermeyi etkileyebilir. Uygulama kodu değişiklikleri, sağlayıcıyla kullanıcı hesabı değişiklikleri veya sağlayıcı uygulaması yapılandırma değişiklikleri yaparken aşağıdakileri temizleyin:
- Kullanıcı oturum açma tanımlama bilgileri
- Uygulama tanımlama bilgileri
- Önbelleğe alınan ve depolanan site verileri
Kalan tanımlama bilgilerinin ve site verilerinin test ve sorun gidermeye engel olmasını önlemeye yönelik bir yaklaşım:
- Tarayıcı yapılandırma
- Tarayıcı her kapatıldığında tüm cookie ve site verilerini silmek üzere yapılandırabileceğiniz test için bir tarayıcı kullanın.
- Uygulama, test kullanıcısı veya sağlayıcı yapılandırmasında yapılan herhangi bir değişiklik için tarayıcının el ile veya IDE tarafından kapatıldığını doğrulayın.
- Visual Studio'da InPrivate veya Gizli modda tarayıcı açmak için özel bir komut kullanın:
- Visual Studio'nun Çalıştır düğmesinden Gözat iletişim kutusunu açın.
- Ekle düğmesini seçin.
- Program alanında tarayıcınızın yolunu belirtin. Aşağıdaki yürütülebilir yollar Windows 10 için tipik yükleme konumlarıdır. Tarayıcınız farklı bir konumda yüklüyse veya Windows 10 kullanmıyorsanız, tarayıcının yürütülebilir dosyasının yolunu sağlayın.
- Microsoft Edge:
C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
- Google Chrome:
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
- Mozilla Firefox:
C:\Program Files\Mozilla Firefox\firefox.exe
- Microsoft Edge:
- Bağımsız Değişkenler alanında, tarayıcının InPrivate veya Gizli modda açmak için kullandığı komut satırı seçeneğini belirtin. Bazı tarayıcılar uygulamanın URL'sini gerektirir.
- Microsoft Edge: kullanın
-inprivate
. - Google Chrome: Yer
--incognito --new-window {URL}
tutucunun{URL}
açıldığı URL olduğu yerde kullanın (örneğin,https://localhost:5001
). - Mozilla Firefox:
-private -url {URL}
Yer tutucunun{URL}
açıldığı URL olduğu yerde kullanın (örneğin,https://localhost:5001
).
- Microsoft Edge: kullanın
- Kolay ad alanına bir ad girin. Örneğin,
Firefox Auth Testing
. - Tamam düğmesini seçin.
- Bir uygulamayla yapılan her test yinelemesi için tarayıcı profilini seçmek zorunda kalmamak için Varsayılan Olarak Ayarla düğmesiyle profili varsayılan olarak ayarlayın.
- Uygulama, test kullanıcısı veya sağlayıcı yapılandırmasında yapılan herhangi bir değişiklik için tarayıcının IDE tarafından kapatıldığını doğrulayın.
Uygulama yükseltmeleri
Çalışan bir uygulama, geliştirme makinesindeki .NET Core SDK'sını yükselttikten veya uygulama içindeki paket sürümlerini değiştirdikten hemen sonra başarısız olabilir. Bazı durumlarda, tutarsız paketler ana yükseltmeler yaparken bir uygulamayı bozabilir. Bu sorunların çoğu şu yönergeleri izleyerek düzeltilebilir:
- Komut kabuğundan yürüterek
dotnet nuget locals all --clear
yerel sistemin NuGet paket önbelleklerini temizleyin. - Proje
bin
veobj
klasörlerini silin. - Projeyi geri yükleyin ve yeniden oluşturun.
- Uygulamayı yeniden dağıtmadan önce sunucudaki dağıtım klasöründeki tüm dosyaları silin.
Not
Uygulamanın hedef çerçevesiyle uyumlu olmayan paket sürümlerinin kullanımı desteklenmez. Paket hakkında bilgi için NuGet Galerisi'ni veya FuGet Paket Gezgini'ni kullanın.
Server
Uygulamayı çalıştırma
Barındırılan Blazor WebAssemblybir çözümü test ederken ve sorun giderirken uygulamayı projeden çalıştırdığınızdan Server
emin olun.
Kullanıcıyı inceleme
Aşağıdaki User
bileşen doğrudan uygulamalarda kullanılabilir veya daha fazla özelleştirme için temel olarak kullanılabilir.
User.razor
:
@page "/user"
@attribute [Authorize]
@using System.Text.Json
@using System.Security.Claims
@inject IAccessTokenProvider AuthorizationService
<h1>@AuthenticatedUser?.Identity?.Name</h1>
<h2>Claims</h2>
@foreach (var claim in AuthenticatedUser?.Claims ?? Array.Empty<Claim>())
{
<p class="claim">@(claim.Type): @claim.Value</p>
}
<h2>Access token</h2>
<p id="access-token">@AccessToken?.Value</p>
<h2>Access token claims</h2>
@foreach (var claim in GetAccessTokenClaims())
{
<p>@(claim.Key): @claim.Value.ToString()</p>
}
@if (AccessToken != null)
{
<h2>Access token expires</h2>
<p>Current time: <span id="current-time">@DateTimeOffset.Now</span></p>
<p id="access-token-expires">@AccessToken.Expires</p>
<h2>Access token granted scopes (as reported by the API)</h2>
@foreach (var scope in AccessToken.GrantedScopes)
{
<p>Scope: @scope</p>
}
}
@code {
[CascadingParameter]
private Task<AuthenticationState> AuthenticationState { get; set; }
public ClaimsPrincipal AuthenticatedUser { get; set; }
public AccessToken AccessToken { get; set; }
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
var state = await AuthenticationState;
var accessTokenResult = await AuthorizationService.RequestAccessToken();
if (!accessTokenResult.TryGetToken(out var token))
{
throw new InvalidOperationException(
"Failed to provision the access token.");
}
AccessToken = token;
AuthenticatedUser = state.User;
}
protected IDictionary<string, object> GetAccessTokenClaims()
{
if (AccessToken == null)
{
return new Dictionary<string, object>();
}
// header.payload.signature
var payload = AccessToken.Value.Split(".")[1];
var base64Payload = payload.Replace('-', '+').Replace('_', '/')
.PadRight(payload.Length + (4 - payload.Length % 4) % 4, '=');
return JsonSerializer.Deserialize<IDictionary<string, object>>(
Convert.FromBase64String(base64Payload));
}
}
JSON Web Belirtecinin (JWT) içeriğini inceleme
JSON Web Belirtecinin (JWT) kodunu çözmek için Microsoft'un jwt.ms aracını kullanın. Kullanıcı arabirimindeki değerler hiçbir zaman tarayıcınızdan ayrılmaz.
Kodlanmış JWT örneği (görüntü için kısaltıldı):
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j ... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q
Azure AAD B2C'de kimlik doğrulaması yapılan bir uygulama için araç tarafından çözülen örnek JWT:
{
"typ": "JWT",
"alg": "RS256",
"kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
"exp": 1610059429,
"nbf": 1610055829,
"ver": "1.0",
"iss": "https://mysiteb2c.b2clogin.com/11112222-bbbb-3333-cccc-4444dddd5555/v2.0/",
"sub": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"aud": "00001111-aaaa-2222-bbbb-3333cccc4444",
"nonce": "bbbb0000-cccc-1111-dddd-2222eeee3333",
"iat": 1610055829,
"auth_time": 1610055822,
"idp": "idp.com",
"tfp": "B2C_1_signupsignin"
}.[Signature]
Ek kaynaklar
- Bir uygulamanın yayımcı etki alanını yapılandırma
- Microsoft Entra ID uygulama bildirimi: identifierUris özniteliği
- ASP.NET Core Blazor WebAssembly ek güvenlik senaryoları
- Authentication.MSAL JavaScript kitaplığının özel bir sürümünü oluşturma
- Güvenli bir varsayılan istemciye sahip bir uygulamada kimliği doğrulanmamış veya yetkisiz web API'si istekleri
- Microsoft Entra Id grupları ve rolleri ile ASP.NET Core Blazor WebAssembly (.NET 5 - .NET 7)
- ASP.NET Core ile Microsoft identity platformu ve Microsoft Entra Id
- Microsoft identity platformu belgeleri
- Hızlı Başlangıç: Microsoft identity platformuna uygulama kaydetme
- Microsoft Entra Id'de uygulama özellikleri için en iyi güvenlik uygulamaları
ASP.NET Core