Aracılığıyla paylaş


Kimlik Doğrulama kitaplığı ile ASP.NET Core Blazor WebAssembly tek başına uygulamasının güvenliğini sağlama

Note

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.

Warning

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, ASP.NET Core Blazor WebAssembly tek başına uygulamasının güvenliğini Blazor WebAssembly Kimlik Doğrulama kitaplığı ile nasıl sağlayacağınız açıklanmaktadır.

Blazor WebAssembly Kimlik Doğrulama kitaplığı (Authentication.js) yalnızca Microsoft Kimlik Doğrulama Kitaplığı (MSAL, msal.js) aracılığıyla Kod Değişimi (PKCE) yetkilendirme kodu akışı için Proof Key'i destekler. Diğer verme akışlarını uygulamak için MSAL kılavuzuna erişerek MSAL'yi doğrudan uygulayın, ancak uygulamalar için Blazor PKCE dışındaki izin akışlarının kullanılmasını desteklemiyor veya önermiyoruz.

Microsoft Entra (ME-ID) ve Azure Active Directory B2C (AAD B2C) kılavuzu için bu konudaki yönergeleri izlemeyin. Bakınız Microsoft Entra ID ile ASP.NET Core Blazor WebAssembly tek başına uygulamasının güvenliğini sağlama veya Azure Active Directory B2C ile ASP.NET Core Blazor WebAssembly tek başına uygulamasının güvenliğini sağlama.

Bu makaleyi okuduktan sonra ek güvenlik senaryosu kapsamı için bkz . ASP.NET Çekirdek Blazor WebAssembly ek güvenlik senaryoları.

Walkthrough

Kılavuzun alt bölümlerinde aşağıdakilerin nasıl yapılacağı açıklanmaktadır:

  • Bir uygulamayı kaydetme
  • Blazor Uygulamayı oluşturma
  • Uygulamayı çalıştırma

Bir uygulamayı kaydetme

IP'nin bakımcısı tarafından sağlanan yönergeleri izleyerek bir uygulamayı OpenID Connect (OIDC)Identity Sağlayıcı (IP) ile kaydedin.

Aşağıdaki bilgileri kaydedin:

  • Yetkili (örneğin, https://accounts.google.com/).
  • Uygulama (istemci) kimliği (örneğin, 2...7-e...q.apps.googleusercontent.com).
  • Ek IP yapılandırması (IP'nin belgelerine bakın).

Note

IP OIDC kullanmalıdır. Örneğin, Facebook'un IP'si OIDC uyumlu bir sağlayıcı olmadığından bu konudaki yönergeler Facebook IP'siyle çalışmaz. Daha fazla bilgi için bkz . Secure ASP.NET Core Blazor WebAssembly.

Blazor Uygulamayı oluşturma

Bağımsız bir uygulama oluşturmak için kütüphane kullanan yönergeleri, seçtiğiniz araçlarla izleyin. Kimlik doğrulaması için destek ekliyorsanız, uygulamayı ayarlama ve yapılandırma yönergeleri için bu makalenin Uygulama Bölümleri bölümüne bakın.

Kimlik doğrulama mekanizmasıyla yeni Blazor WebAssembly bir proje oluşturmak için:

Uygulama şablonunu seçtikten Blazor WebAssembly sonra Kimlik doğrulama türünü Tek Tek Hesaplar olarak ayarlayın.

Uygulama şablonunu seçtikten Blazor WebAssembly sonra Kimlik doğrulama türünü Tek Tek Hesaplar olarak ayarlayın. ASP.NET Core Barındırılan onay kutusunun seçili olmadığını doğrulayın.

Tek Tek Hesaplar seçimi, ASP.NET Core'un Identity sistemini kullanır. Bu seçim kimlik doğrulama desteği ekler ve kullanıcıların bir veritabanında depolanmasına neden olmaz. Bu makalenin aşağıdaki bölümlerinde daha fazla ayrıntı sağlanır.

Uygulamayı yapılandırma

Uygulamayı IP tarafından verilen yönergeleri izleyerek konfigüre edin. Uygulamanın Local:Authority dosyasında en azından Local:ClientId ve wwwroot/appsettings.json yapılandırma ayarları gereklidir.

{
  "Local": {
    "Authority": "{AUTHORITY}",
    "ClientId": "{CLIENT ID}"
  }
}

5001 numaralı bağlantı noktasındaki adreste localhost çalışan bir uygulama için Google OAuth 2.0 OIDC örneği:

{
  "Local": {
    "Authority": "https://accounts.google.com/",
    "ClientId": "2...7-e...q.apps.googleusercontent.com",
    "PostLogoutRedirectUri": "https://localhost:5001/authentication/logout-callback",
    "RedirectUri": "https://localhost:5001/authentication/login-callback",
    "ResponseType": "code"
  }
}

Yeniden yönlendirme URI'si (https://localhost:5001/authentication/login-callback), Google API'leri konsolu'ndaki Kimlik Bilgileri bölümünde, > olarak kayıtlıdır. {NAME}, bu konsoldaki > uygulama listesindeki uygulamanın istemci adıdır.

Note

OAuth 2.0 belirtimi başına bazı OIDC IP'leri için yeniden yönlendirme URI'sinin bağlantı noktası numarasını localhost sağlamak gerekli değildir. Bazı IP'ler geri döngü adreslerinin bağlantı noktasını atlarken yeniden yönlendirme URI'sine izin verir. Diğerleri, bağlantı noktası numarası için joker karakter kullanılmasına izin verir (örneğin, *). Ek bilgi için IP'nin belgelerine bakın.

Uygulamayı çalıştırma

Uygulamayı çalıştırmak için aşağıdaki yaklaşımlardan birini kullanın:

  • Visual Studio
    • Çalıştır düğmesini seçin.
    • Menüden Hata AyıklamaYı
    • F5 tuşuna basın.
  • .NET CLI komut kabuğu: Uygulamanın klasöründen dotnet watch (veya dotnet run) komutunu yürütür.

Uygulamanın bölümleri

Bu bölümde, bir uygulamanın proje şablonundan Blazor WebAssembly oluşturulan bölümleri ve uygulamanın nasıl yapılandırıldığı açıklanmaktadı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.

Kimlik doğrulama paketi

Bireysel Hesaplar kullanmak üzere bir uygulama oluşturulduğunda, uygulama otomatik olarak Microsoft.AspNetCore.Components.WebAssembly.Authentication paketi için bir başvuru 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.AspNetCore.Components.WebAssembly.Authentication .

Note

.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.

Kimlik doğrulama hizmeti desteği

Hizmet kapsayıcısında OpenID Connect (OIDC) kullanarak kullanıcıların kimliğini doğrulama desteği, AddOidcAuthentication paketinin sağladığı Microsoft.AspNetCore.Components.WebAssembly.Authentication uzantı yöntemiyle kaydedilir.

yöntemi, AddOidcAuthentication OIDC kullanarak 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 OIDC uyumlu IP'den alınabilir. Uygulamayı kaydederken genellikle çevrimiçi portalında gerçekleşen değerleri alın.

Yeni bir uygulama için aşağıdaki yapılandırmada {AUTHORITY} ve {CLIENT ID} yer tutucuları için değerler sağlayın. Uygulamanın IP'siyle kullanmak için gereken diğer yapılandırma değerlerini sağlayın. Google’ın PostLogoutRedirectUri, RedirectUri ve ResponseType gerektirdiği bir örnektir. Uygulamaya kimlik doğrulaması ekliyorsanız, aşağıdaki kodu ve yapılandırmayı yer tutucular ve diğer yapılandırma değerleriyle birlikte uygulamaya el ile ekleyin.

Program dosyasında:

builder.Services.AddOidcAuthentication(options =>
{
    builder.Configuration.Bind("Local", options.ProviderOptions);
});

wwwroot/appsettings.json yapılandırması

wwwroot/appsettings.json dosyası tarafından yapılandırma sağlanır.

{
  "Local": {
    "Authority": "{AUTHORITY}",
    "ClientId": "{CLIENT ID}"
  }
}

Erişim belirteci kapsamları

Blazor WebAssembly şablonu, openid ve profile için varsayılan kapsamları otomatik olarak yapılandırır.

Şablon, Blazor WebAssembly uygulamayı otomatik olarak güvenli bir API için erişim belirteci istemek üzere yapılandırmaz. Oturum açma akışının parçası olarak bir erişim belirteci sağlamak için, kapsamı OidcProviderOptions varsayılan belirteç kapsamlarına ekleyin. Uygulamaya kimlik doğrulaması ekliyorsanız, aşağıdaki kodu el ile ekleyin ve kapsam URI'sini yapılandırın.

Program dosyasında:

builder.Services.AddOidcAuthentication(options =>
{
    ...
    options.ProviderOptions.DefaultScopes.Add("{SCOPE URI}");
});

Daha fazla bilgi için Ek senaryolar makalesinin aşağıdaki bölümlerine bakın:

Dosyayı içeri aktarır

"Microsoft.AspNetCore.Components.Authorization ad alanı, _Imports.razor dosyası aracılığıyla uygulama genelinde kullanılabilir hale getirilir."

...
@using Microsoft.AspNetCore.Components.Authorization
...

Dizin sayfası

Dizin sayfası (wwwroot/index.html), JavaScript'te AuthenticationService ögesini 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.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"></script>

Uygulama bileşeni

Bileşen App (App.razor), uygulamalarda bulunan App bileşene Blazor Server benzer:

  • AuthorizeRouteView bileşeni, geçerli kullanıcının belirli bir sayfaya erişim yetkisine sahip olduğunu doğrular ya da yetkili değilse RedirectToLogin bileşenini işler.
  • Bileşen, RedirectToLogin yetkisiz kullanıcıları oturum açma sayfasına yönlendirmeyi yönetir.
  • CascadingAuthenticationState bileşeni, AuthenticationState uygulamanın geri kalanına ifşa etme işlemini yönetir.
  • AuthorizeRouteView bileşeni, geçerli kullanıcının belirli bir sayfaya erişim yetkisine sahip olduğunu doğrular ya da yetkili değilse RedirectToLogin bileşenini işler.
  • 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) için App.razor 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 AppApp.razorbileşeni () inceleyin. Dal seçici menüsünden sürümü seçin ve yıllar içinde taşındığından, deponun ProjectTemplates klasöründe bileşeni arayın.

    Note

    .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

Bileşen RedirectToLogin (RedirectToLogin.razor):

Başvuru kaynağındaki RedirectToLogin bileşenini inceleyin. Bileşenin konumu zaman içinde değiştiğinden, bileşeni bulmak için GitHub arama araçlarını kullanın.

Oturum açma yolu uygulama tarafından özelleştirilebilir (RemoteAuthenticationApplicationPathsOptions.LogInPath, çerçeve varsayılanları (dotnet/aspnetcore başvuru kaynağı)). Proje şablonunun RedirectToLogin bileşeni varsayılan oturum açma yolunu authentication/loginkullanır.

Note

.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).

Bir uygulama oturum açma yolunu özelleştirirse aşağıdaki yaklaşımlardan birini kullanın:

  • Bileşendeki sabit kodlanmış dizedeki yolu eşleştirin RedirectToLogin .

  • Yapılandırılan değeri elde etmek için ekleme RemoteAuthenticationOptions . Örneğin, yolunu ile AddApiAuthorizationözelleştirirken bu yaklaşımı kullanın. Bileşenin en üstüne RedirectToLogin aşağıdaki yönergeleri ekleyin:

    @using Microsoft.Extensions.Options
    @inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> RemoteOptions
    

    yönteminde bileşenin yeniden yönlendirmesini OnInitialized değiştirin:

    - Navigation.NavigateToLogin("authentication/login");
    + Navigation.NavigateToLogin(RemoteOptions.Get(Options.DefaultName)
    +     .AuthenticationPaths.LogInPath);
    

    Note

    Diğer yollar proje şablonunun yollarından veya çerçevenin varsayılan yollarından farklıysa, aynı şekilde yönetilmelidir.

LoginDisplay bileşeni

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şenini inceleyin. Bileşenin konumu zaman içinde değiştiğinden, bileşeni bulmak için GitHub arama araçlarını kullanın. eşittir Hosted için true şablonlu içerik kullanılır.

    Note

    .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

Bileşen (Authentication) tarafından Pages/Authentication.razor oluşturulan sayfa, farklı kimlik doğrulama aşamalarını işlemek için gereken yolları tanımlar.

Bileşen RemoteAuthenticatorView :

@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication

<RemoteAuthenticatorView Action="@Action" />

@code {
    [Parameter]
    public string? Action { get; set; }
}

Note

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.

Troubleshoot

Logging

Kimlik doğrulaması için hata ayıklama veya izleme günlüğünü etkinleştirmek amacıyla, makale sürümü seçicisini .NET 7 veya sonraki sürümlerde ASP.NET Core olarak ayarlayarak, ASP.NET Core Blazor WebAssembly günlüğününBlazor bölümüne bakın.

Yaygın 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.
    • IP'nin uygulama kaydındaki Yeniden Yönlendirme URI'sinde yapılandırılandan farklı bir bağlantı noktasında uygulamayı ç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ı, geliştirme testi dışındaki adresler localhost 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:

    • JWT (JSON Web Belirteci) kullanılan Blazor sürümlerinde, sorunun hangi noktada gerçekleştiğine bağlı olarak, bir istemcinin kimliğini doğrulamak veya sunucu web API'sine erişmek için kullanılan belirtecin içeriğini çözümleyin. 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:

    1. Azure portalında uygulamanın bildirimine erişin.
    2. özniteliğini allowPublicClient veya nullolarak true ayarlayın.

Çerezler 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ı giriş 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
    • Argümanlar alanında, tarayıcının InPrivate veya Gizli modda açılması için kullandığı komut satırı seçeneğini belirtin. Bazı tarayıcılar uygulamanın URL'sini gerektirir.
      • Microsoft Edge'i kullanın -inprivate.
      • Google Chrome: --incognito --new-window {URL} yer tutucusunu açmak için {URL} kullanın (örneğin, https://localhost:5001).
      • Mozilla Firefox: -private -url {URL} kullanın, burada {URL} yer tutucusu açılacak olan URL'dir (örneğin, https://localhost:5001).
    • 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 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:

  1. Yerel sistemin NuGet paket önbelleklerini temizlemek için komut kabuğunda dotnet nuget locals all --clear komutunu çalıştırın.
  2. Proje bin ve obj klasörlerini silin.
  3. Projeyi geri yükleyin ve yeniden oluşturun.
  4. Uygulamayı yeniden dağıtmadan önce sunucudaki dağıtım klasöründeki tüm dosyaları silin.

Note

Uygulamanın hedef çerçevesiyle uyumlu olmayan paket sürümlerinin kullanımı desteklenmez. Paket hakkında bilgi için NuGet Gallerykullanı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 kimliğini doğrulayan bir uygulama için araç kullanılarak çözümlenen ö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