Azure Active Directory B2C ile ASP.NET Core Blazor WebAssembly tek başına uygulamasının güvenliğini sağlama

Not

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Bu makalede, kimlik doğrulaması için Azure Active Directory (AAD) B2C kullanan tek başına Blazor WebAssembly bir uygulamanın nasıl oluşturulacağı açıklanmaktadır.

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 uygulama kaydetme
  • Blazor Uygulamayı oluşturma
  • Uygulamayı çalıştırma

Azure'da kiracı oluşturma

Öğretici: AAD B2C kiracısı oluşturmak için Azure Active Directory B2C kiracısı oluşturma sayfasındaki yönergeleri izleyin.

Bu makalenin yönergelerine devam etmeden önce AAD B2C kiracısı için doğru dizini seçtiğinizi onaylayın.

Azure'da uygulama kaydetme

AAD B2C uygulamasını kaydetme:

  1. Azure portalında Azure AD B2C'ye gidin. Kenar çubuğunda Uygulama kayıtları seçin. Yeni kayıt düğmesini seçin.
  2. Uygulama için bir Ad sağlayın (örneğin, Blazor Tek Başına AAD B2C).
  3. Desteklenen hesap türleri için çok kiracılı seçeneğini belirleyin: Herhangi bir kuruluş dizinindeki veya herhangi bir kimlik sağlayıcısındaki hesaplar. Azure AD B2C ile kullanıcıların kimliğini doğrulamak için.
  4. 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.comyeniden yönlendirme URI'sini sağladığınız anda üretim yeniden yönlendirme URI'sini localhost 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.
  5. Doğrulanmamış bir yayımcı etki alanı kullanıyorsanız, İzinler>OpenId ve offline_access izinleri için yönetici onayı ver seçeneğinin belirlendiğini onaylayın. Yayımcı etki alanı doğrulanmışsa, bu onay kutusu mevcut değildir.
  6. Kaydet'i seçin.

Not

AAD B2C yeniden yönlendirme URI'sinin bağlantı noktası numarasını localhost 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).

Aşağıdaki bilgileri kaydedin:

  • Uygulama (istemci) kimliği (örneğin, 41451fa7-82d9-4673-8fa5-69eff5a761fd).
  • AAD B2C örneği (örneğin, https://contoso.b2clogin.com/sonunda eğik çizgi bulunan örneği): Örnek, Azure portalındaki Uygulama kayıtları sayfasından Uç Noktalar penceresini açarak bulunabilen bir Azure B2C uygulama kaydının şeması ve konağıdır.
  • AAD B2C Birincil/Yayımcı/Kiracı etki alanı (örneğin, ): Etki alanı, contoso.onmicrosoft.comkayıtlı uygulamanın Azure portalının Markalama dikey penceresinde Yayımcı etki alanı olarak kullanılabilir.

Kimlik Doğrulama>Platformu yapılandırmaları>Tek sayfalı uygulamada:

  1. yeniden yönlendirme URI'sinin https://localhost/authentication/login-callback mevcut olduğunu onaylayın.
  2. Ö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.
  3. Uygulamanın kalan varsayılanları bu deneyim için kabul edilebilir.
  4. Değişiklik yaptıysanız Kaydet düğmesini seçin.

Azure AD B2C>Kullanıcı akışlarında:Home>

Kaydolma ve oturum açma kullanıcı akışı oluşturma

En azından, bileşeninde () öğesini doldurmak/context.User.Identity.Namecontext.User.Identity?.Nameiçin Uygulama talepleri>Görünen Ad kullanıcı özniteliğini seçin.Shared/LoginDisplay.razorLoginDisplay

Uygulama için oluşturulan kaydolma ve oturum açma kullanıcı akışı adını kaydedin (örneğin, B2C_1_signupsignin).

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 IndividualB2C --aad-b2c-instance "{AAD B2C INSTANCE}" --client-id "{CLIENT ID}" --domain "{TENANT DOMAIN}" -o {PROJECT NAME} -ssp "{SIGN UP OR SIGN IN POLICY}"
Yer tutucu Azure portal adı Örnek
{AAD B2C INSTANCE} Örnek https://contoso.b2clogin.com/ (sondaki eğik çizgiyi içerir)
{PROJECT NAME} BlazorSample
{CLIENT ID} Uygulama (istemci) kimliği 41451fa7-82d9-4673-8fa5-69eff5a761fd
{SIGN UP OR SIGN IN POLICY} Kaydolma/oturum açma kullanıcı akışı B2C_1_signupsignin1
{TENANT DOMAIN} Birincil/Yayımcı/Kiracı etki alanı contoso.onmicrosoft.com

seçeneğiyle -o|--output belirtilen çıkış konumu, yoksa bir proje klasörü oluşturur ve proje adının bir parçası olur.

ve offline_accessDefaultAccessTokenScopesiçin openid bir çift MsalProviderOptions ekleyin:

builder.Services.AddMsalAuthentication(options =>
{
    ...
    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
});

Uygulamayı oluşturduktan sonra şunları yapabilmeniz gerekir:

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ı>Başlat Hata Ayıklamayı Kullanın.
    • F5 tuşuna basın.
  • .NET CLI komut kabuğu: Komutu uygulamanın klasöründen yürütür dotnet run .

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

Tek bir B2C Hesabı ()IndividualB2C 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

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 tüm hizmetleri ayarlar.

Program dosyasında:

builder.Services.AddMsalAuthentication(options =>
{
    builder.Configuration.Bind("AzureAdB2C", options.ProviderOptions.Authentication);
});

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 yapılandırmadan alınabilir.

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

{
  "AzureAdB2C": {
    "Authority": "{AAD B2C INSTANCE}{TENANT DOMAIN}/{SIGN UP OR SIGN IN POLICY}",
    "ClientId": "{CLIENT ID}",
    "ValidateAuthority": false
  }
}

Yukarıdaki yapılandırmada {AAD B2C INSTANCE} , sonunda eğik çizgi bulunur.

Örnek:

{
  "AzureAdB2C": {
    "Authority": "https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1_signupsignin1",
    "ClientId": "41451fa7-82d9-4673-8fa5-69eff5a761fd",
    "ValidateAuthority": false
  }
}

Erişim belirteci kapsamları

Ş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 bir parçası olarak erişim belirteci sağlamak için kapsamı öğesinin varsayılan erişim belirteci kapsamlarına MsalProviderOptionsekleyin:

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

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

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

Oturum açma modu

Ç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 redirectyapılandırın:

builder.Services.AddMsalAuthentication(options =>
{
    ...
    options.ProviderOptions.LoginMode = "redirect";
});

Varsayılan ayar olur popupve dize değeri büyük/küçük harfe duyarlı değildir.

Dosyayı içeri aktarır

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ı

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

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

  • 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.
  • Bileşen, CascadingAuthenticationState öğesini uygulamanın geri kalanına ifşa etme işlemini yönetir AuthenticationState .
  • 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 Appbileşeni (App.razor) inceleyin. Dal seçiciden sürümü seçin ve yıllar içinde taşındığından deponun klasöründe bileşeni ProjectTemplates 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

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:

Başvuru kaynağındaki RedirectToLoginbileş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

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 LoginDisplaybileş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şittir true için Hosted ş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

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 :

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

Özel ilkeler

Microsoft Kimlik Doğrulama Kitaplığı (Microsoft.Authentication.WebAssembly.MsalNuGet paketi) varsayılan olarak AAD B2C özel ilkelerini desteklemez.

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:

    • ON Web Belirteci'nin BlazorJS(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. ON Web Token (JWT) içeriğini JSinceleme.

    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 ya da 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 trueolarak null ayarlayın.

Cookies ve site verileri

Cookies 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çmaları cookie
  • Uygulamalar cookie
  • Önbelleğe alınan ve depolanan site verileri

Kalan cookies 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
    • 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).
    • 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:

  1. Komut kabuğundan yürüterek dotnet nuget locals all --clear yerel sistemin NuGet paket önbelleklerini temizleyin.
  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.

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));
    }
}

ON Web Belirtecinin JS(JWT) içeriğini inceleme

ON Web Belirtecinin (JWT) kodunu JSçö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/5cc15ea8-a296-4aa3-97e4-226dcc9ad298/v2.0/",
  "sub": "5ee963fb-24d6-4d72-a1b6-889c6e2c7438",
  "aud": "70bde375-fce3-4b82-984a-b247d823a03f",
  "nonce": "b2641f54-8dc4-42ca-97ea-7f12ff4af871",
  "iat": 1610055829,
  "auth_time": 1610055822,
  "idp": "idp.com",
  "tfp": "B2C_1_signupsignin"
}.[Signature]

Ek kaynaklar