Kimlik doğrulama ASP.NET Core Blazor WebAssembly tek başına bir uygulamanın güvenliğini sağlama

B2C Azure Active Directory (AAD) ve Azure Active Directory B2C (AAD B2C) için bu konudaki yönergeleri izleyin. Bu içindekiler AAD B2C AAD konu başlıklarına bakın.

Kitaplığı kullanan tek Blazor WebAssembly başına bir Microsoft.AspNetCore.Components.WebAssembly.Authentication uygulama oluşturmak için, araç seçiminize yönelik yönergeleri izleyin. Kimlik doğrulaması desteği ekliyorsanız, uygulamayı ayarlama ve yapılandırma konusunda rehberlik için bu makalenin aşağıdaki bölümlerine bakın.

Not

Sağlayıcı Identity (IP), OpenID Bağlan (OIDC) kullan gerekir. Örneğin, Facebook'un IP'si OIDC uyumlu bir sağlayıcı değildir, bu nedenle bu konudaki kılavuz Facebook IP'leriyle birlikte çalışmaz. Daha fazla bilgi için bkz. Güvenli ASP.NET Core Blazor WebAssembly.

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

  1. Web Uygulaması oluştur Blazor WebAssembly iletişim kutusunda Uygulama şablonunu seçtikten ASP.NET Core Kimlik Doğrulaması'nın altında Değiştir'i seçin.

  2. Kullanıcı hesaplarını uygulama içinde depola seçeneğiyle Bireysel Kullanıcı Hesapları'ASP.NET Core Identity seçin. Bu seçim kimlik doğrulaması desteği ekler ve kullanıcıların bir veritabanında depolanmasına neden değildir. Bu makalenin aşağıdaki bölümleri daha fazla ayrıntı sağlar.

Kimlik doğrulama paketi

Bireysel Kullanıcı Hesaplarını kullanmak için bir uygulama oluşturulduğunda, uygulama otomatik olarak uygulamanın proje dosyasında Microsoft.AspNetCore.Components.WebAssembly.Authentication paket için bir paket başvurusu alır. Paket, uygulamanın kullanıcıların kimliğini doğrulamasını ve korumalı API'leri çağıracak belirteçleri almasını sağlayan bir temel öğeler kümesi sağlar.

Uygulamaya kimlik doğrulaması ekliyorsanız paketi uygulamanın proje dosyasına el ile ekleyin:

<PackageReference 
  Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" 
  Version="{VERSION}" />

yer tutucusu için, uygulamanın paylaşılan çerçeve sürümüyle eşleşen paketin en son kararlı sürümü NuGet.org adresinde paketin Sürüm Geçmişi {VERSION} içinde bulunabilir.

Kimlik doğrulama hizmeti desteği

Kullanıcıların kimliklerini doğrulama desteği, paket tarafından sağlanan uzantı AddOidcAuthentication yöntemiyle hizmet kapsayıcısı içinde Microsoft.AspNetCore.Components.WebAssembly.Authentication kaydedilir. Bu yöntem, uygulamanın Sağlayıcı (IP) ile etkileşim kurması için Identity gereken hizmetleri ayarlar.

Yeni bir uygulama için aşağıdaki yapılandırmada {AUTHORITY} ve {CLIENT ID} yer tutucuları için değerler girin. Uygulamanın IP'sini kullanmak için gereken diğer yapılandırma değerlerini sağlama. Örnek, , ve gerektiren PostLogoutRedirectUri RedirectUri Google'a ResponseType göredir. Bir uygulamaya kimlik doğrulaması ekliyorsanız, aşağıdaki kodu ve yapılandırmayı uygulamaya yer tutucular ve diğer yapılandırma değerleriyle el ile ekleyin.

Program.cs:

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

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

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

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": "id_token"
  }
}

Yeniden yönlendirme URI'si ( ), Google API'leri konsolunda Kimlik Bilgileri Yetkili yeniden yönlendirme https://localhost:5001/authentication/login-callback > {NAME} > URI'leri'ne {NAME} kaydedilir; burada, Google API'leri konsollarının OAuth 2.0 İstemci Kimlikleri uygulama listesinde uygulamanın istemci adıdır.

Tek başına uygulamalar için kimlik doğrulama desteği, OpenID Bağlan (OIDC) kullanılarak sunulur. yöntemi, AddOidcAuthentication OIDC kullanarak bir uygulamanın kimliğini doğrulamak için gereken parametreleri yapılandırmak üzere bir geri çağırma kabul eder. Uygulamayı yapılandırmak için gereken değerler OIDC uyumlu IP'den edinebilirsiniz. Uygulamayı kaydeden değerleri alın. Bu değerler genellikle çevrimiçi portallarında gerçekleşir.

Erişim belirteci kapsamları

Şablon, Blazor WebAssembly ve için varsayılan kapsamları otomatik olarak openid profile yapılandırıyor.

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

Program.cs:

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

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

İçeri aktarma dosyası

Ad Microsoft.AspNetCore.Components.Authorization alanı, dosya aracılığıyla uygulamanın her yerinde kullanılabilir _Imports.razor yapılır:

@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 içinde tanımlayan bir komut dosyası içerir AuthenticationService . AuthenticationService OıDC protokolünün alt düzey ayrıntılarını işler. Uygulama, kimlik doğrulama işlemlerini gerçekleştirmek için komut dosyasında tanımlanan yöntemleri dahili olarak çağırır.

<script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/
    AuthenticationService.js"></script>

Uygulama bileşeni

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

  • Bileşeni, CascadingAuthenticationState uygulamanın geri AuthenticationState kalanına ifşayı yönetir.
  • Bileşen, AuthorizeRouteView geçerli kullanıcının belirli bir sayfaya erişme yetkisine sahip olduğundan veya başka bir şekilde bileşeni işlemeye yetkili olduğundan emin RedirectToLogin olur.
  • Bileşen, RedirectToLogin yetkisiz kullanıcıları oturum açma sayfasına yeniden yönlendirmeyi yönetir.

ASP.NET Core'nin yayınlarında çerçevede yapılan değişikliklerden dolayı, bu bölümde Razor App bileşenin ( App.razor ) işaretlemesi gösterilmez. Bileşenin verilen bir sürüme yönelik işaretlemelerini incelemek için aşağıdaki yaklaşımlardan birini kullanın:

  • Kullanmak istediğiniz uygulamanın sürümü için varsayılan proje şablonundan kimlik Blazor WebAssembly doğrulaması için ASP.NET Core bir uygulama oluşturun. Oluşturulan App uygulamada bileşeni App.razor ( ) inceleme.

  • Başvuru App kaynağında App.razor bileşeni ( ) inceleme.

    Not

    Belge, ASP.NET Core kaynağı yüklemesi için ürün biriminin bir sonraki sürümü için geçerli geliştirmeyi temsil eden deponun dal main ASP.NET Core. Farklı bir sürümün dallarını seçmek için Dalları veya etiketleri değiştir açılan listesini kullanarak dalı seçin. Örneğin, ASP.NET Core release/5.0 5.0 sürümü için dalı seçin.

RedirectToLogin bileşeni

RedirectToLoginBileşen ( Shared/RedirectToLogin.razor ):

  • Yetkisiz kullanıcıların oturum açma sayfasına yeniden yönlendirildiğini yönetir.
  • Kimlik doğrulaması başarılı olursa bu sayfaya döndürülmeleri için kullanıcının erişmeye çalışan geçerli URL 'YI korur.
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateTo(
            $"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
    }
}

LoginDisplay bileşeni

Bileşeni LoginDisplay ( Shared/LoginDisplay.razor ) bileşeninde işlenir ( ) ve aşağıdaki MainLayout davranışları Shared/MainLayout.razor yönetir:

  • Kimliği doğrulanmış kullanıcılar için:
    • Geçerli kullanıcı adını görüntüler.
    • Uygulamada oturumun açık olduğu bir düğme sunar.
  • Anonim kullanıcılar için oturum açma seçeneği sunar.
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@inject NavigationManager Navigation
@inject SignOutSessionStateManager SignOutManager

<AuthorizeView>
    <Authorized>
        Hello, @context.User.Identity.Name!
        <button class="nav-link btn btn-link" @onclick="BeginSignOut">
            Log out
        </button>
    </Authorized>
    <NotAuthorized>
        <a href="authentication/login">Log in</a>
    </NotAuthorized>
</AuthorizeView>

@code {
    private async Task BeginSignOut(MouseEventArgs args)
    {
        await SignOutManager.SetSignOutState();
        Navigation.NavigateTo("authentication/logout");
    }
}

Kimlik doğrulama bileşeni

Bileşeni ( ) tarafından Authentication üretilen Pages/Authentication.razor sayfa, farklı kimlik doğrulama aşamalarını işleme için gereken yolları tanımlar.

RemoteAuthenticatorViewBileşen:

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

<RemoteAuthenticatorView Action="@Action" />

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

Sorun giderme

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ırma nedeniyle oluşur. Aşağıda birkaç örnek verilmiştir:

    • Senaryonun gereksinimlerine bağlı olarak, eksik veya yanlış bir yetkili, örnek, kiracı KIMLIĞI, kiracı etki alanı, Istemci KIMLIĞI veya yeniden yönlendirme URI 'SI, bir uygulamanın istemcilerin kimliğini doğrulamasını önler.
    • Yanlış bir erişim belirteci kapsamı, istemcilerin sunucu Web API uç noktalarına erişmesini önler.
    • Yanlış veya eksik sunucu API izinleri istemcilerin sunucu Web API uç noktalarına erişmesini önler.
    • Uygulamayı, sağlayıcının uygulama kaydının yeniden yönlendirme URI 'sinde yapılandırılmış olandan farklı bir bağlantı noktasında çalıştırmak Identity .

    Bu makalenin kılavuzunun yapılandırma bölümlerinde doğru yapılandırma örnekleri gösterilmektedir. Uygulama ve IP yanlış yapılandırmayla ilgili makalenin her bölümüne dikkatle göz atın.

    Yapılandırma doğru görünüyorsa:

    • Uygulama günlüklerini analiz edin.

    • Tarayıcı geliştirici araçlarıyla istemci uygulaması ile IP veya sunucu uygulaması arasındaki ağ trafiğini inceleyin. Genellikle, bir istek yapıldıktan sonra, hataya neden olan bir hata iletisi veya bir sorun olduğunu bir ileti, IP veya sunucu uygulaması tarafından istemciye döndürülür. Geliştirici araçları Kılavuzu aşağıdaki makalelerde bulunur:

    • Bir istemcinin kimliğini doğrulamak için kullanılan bir JSON Web Token (JWT) içeriğinin kodunu çözün veya sorunun nerede oluştuğunu bağlı olarak bir sunucu Web API 'sine erişim. Daha fazla bilgi için bkz. bir JSON Web token (JWT) Içeriğini İnceleme.

    Belgeler, makalelerdeki belge geri bildirimlerine ve hatalara yanıt veriyor ( Bu sayfa geri bildirimi bölümünden bir sorun açar), ancak ürün desteği sağlayamadı. Bir uygulamanın sorunlarını gidermeye yardımcı olmak için çeşitli genel destek forumları vardır. Şunları öneririz:

    Önceki Forumlar Microsoft tarafından sahip değil veya denetlenmiyor.

    güvenlikle ilgili olmayan, hassas olmayan ve gizli olmayan bir dizi framework hata raporu için ASP.NET Core ürün birimiyle bir sorun açın. Bir sorunun nedenini iyice araştırmadan ve bir genel destek forumundaki topluluk yardımıyla, ürün birimiyle ilgili bir sorun açmayın. Ürün birimi, basit yanlış yapılandırma veya üçüncü taraf hizmetleri içeren durumlar nedeniyle bozuk olan ayrı uygulamalarla ilgili sorunları gideremez. bir rapor hassas veya gizli ise ve saldırganların yararlanabilecek potansiyel bir güvenlik kusurunu kullanıyorsa, bkz. raporlama güvenlik sorunları ve hataları (dotnet/aspnetcore GitHub repository).

  • AAD için yetkisiz istemci

    bilgi: Microsoft. AspNetCore. Authorization. DefaultAuthorizationService [2] yetkilendirmesi başarısız oldu. Bu gereksinimler karşılanmadı: DenyAnonymousAuthorizationRequirement: kimliği doğrulanmış bir kullanıcı gerektirir.

    AAD oturum açma geri çağırma hatası:

    • Hata: unauthorized_client
    • Açıklaması AADB2C90058: The provided application is not configured to allow public clients.

    Hatayı gidermek için:

    1. Azure portal, uygulamanın bildirimineerişin.
    2. allowPublicClient Özniteliğini veya olarak ayarlayın null true .

Cookies ve site verileri

Cookies ve site verileri, uygulama güncelleştirmelerinde devam edebilir ve test ve sorun giderme işlemlerini etkileyebilir. Uygulama kodu değişiklikleri yaparken, sağlayıcı ile Kullanıcı hesabı değişiklikleri veya sağlayıcı uygulama yapılandırma değişiklikleri yaparken aşağıdakileri temizleyin:

  • Kullanıcı oturum açma cookie öğeleri
  • Uygulama cookie s
  • Önbelleğe alınmış ve depolanan site verileri

Kalan cookie s ve site verilerinin test ve sorun giderme konusunda kesintiye uğramasını önleyen bir yaklaşım:

  • Tarayıcı yapılandırma
    • cookieTarayıcı her kapatıldığında tüm ve site verilerini silmek üzere yapılandırabileceğiniz test için bir tarayıcı kullanın.
    • Uygulamanın, test kullanıcısının veya sağlayıcı yapılandırmasının herhangi bir değişikliği için tarayıcının el ile veya IDE tarafından kapatıldığından emin olun.
  • Visual Studio ' deki bir tarayıcıyı veya özel modda açmak için özel bir komut kullanın:
    • Visual Studio çalıştır düğmesinden , 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 konuma yüklenirse veya Windows 10 kullanmıyorsanız, tarayıcının yürütülebilir dosyasının yolunu belirtin.
      • 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 ınbilito veya Private modunda 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: Use --incognito --new-window {URL} , yer tutucunun {URL} açılacağı URL (örneğin, https://localhost:5001 ).
      • Mozilla Firefox: Use -private -url {URL} , yer tutucunun {URL} açılacağı URL (örneğin, https://localhost:5001 ).
    • Kolay ad alanına bir ad girin. Örneğin, Firefox Auth Testing.
    • Tamam düğmesini seçin.
    • Her bir uygulamayla test yinelemesi için tarayıcı profilini seçmek zorunda kalmamak için, profili varsayılan olarak Ayarla düğmesi ile varsayılan olarak ayarlayın.
    • Uygulamanın, test kullanıcısının veya sağlayıcı yapılandırmasındaki herhangi bir değişiklik için, tarayıcının IDE tarafından kapatıldığından emin olun.

Uygulama yükseltmeleri

Çalışan bir uygulama, geliştirme makinesindeki .NET Core SDK yükseltmeden veya uygulama içindeki paket sürümlerini değiştirirken hemen başarısız olabilir. Bazı durumlarda, önemli paketler ana yükseltmeler gerçekleştirirken bir uygulamayı bozabilir. Bu sorunların çoğu aşağıdaki yönergeleri izleyerek düzeltilebilir:

  1. bir komut kabuğundan yürüterek yerel sistemin NuGet paketi önbelleklerini temizleyin dotnet nuget locals all --clear .
  2. Proje bin ve obj klasörlerini silin.
  3. Projeyi geri yükleyin ve yeniden derleyin.
  4. Uygulamayı yeniden dağıtmadan önce sunucusundaki dağıtım klasöründeki tüm dosyaları silin.

Not

Uygulamanın hedef çerçevesiyle uyumsuz paket sürümlerinin kullanımı desteklenmez. bir paket hakkında daha fazla bilgi için NuGet galerisi veya fuget paket gezgininikullanın.

Sunucu uygulamasını çalıştırma

Barındırılan bir çözümü test etmek ve sorunlarını giderirken Blazor , uygulamayı projeden çalıştırdığınızdan emin olun Server . örneğin Visual Studio ' de, aşağıdaki yaklaşımlardan biriyle uygulamaya başlamadan önce sunucu projesinin Çözüm Gezgini vurgulandığını doğrulayın:

  • Çalıştır düğmesini seçin.
  • Menüden hata > ayıklamayı Başlat komutunu kullanın.
  • F5tuşuna basın.

JSON Web Token (JWT) içeriğini İnceleme

Bir JSON Web Token (JWT) kodunu çözmek için Microsoft 'un JWT.MS aracını kullanın. Kullanıcı arabirimindeki değerler hiçbir şekilde tarayıcınızdan bırakmayın.

Örnek kodlanmış JWT (görüntülenmek üzere kısaltıldı):

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j ... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q

Azure AAD B2C 'da kimlik doğrulayan bir uygulama için araç tarafından kodu çö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

B2C Azure Active Directory (AAD) ve Azure Active Directory B2C (AAD B2C) için bu konudaki yönergeleri izleyin. Bu içindekiler AAD B2C AAD konu başlıklarına bakın.

Kitaplığı kullanan tek Blazor WebAssembly başına bir Microsoft.AspNetCore.Components.WebAssembly.Authentication uygulama oluşturmak için, araç seçiminize yönelik yönergeleri izleyin. Kimlik doğrulaması desteği ekliyorsanız, uygulamayı ayarlama ve yapılandırma konusunda rehberlik için bu makalenin aşağıdaki bölümlerine bakın.

Not

Sağlayıcı Identity (IP), OpenID Bağlan (OIDC) kullan gerekir. Örneğin, Facebook'un IP'si OIDC uyumlu bir sağlayıcı değildir, bu nedenle bu konudaki kılavuz Facebook IP'leriyle birlikte çalışmaz. Daha fazla bilgi için bkz. Güvenli ASP.NET Core Blazor WebAssembly.

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

  1. Web Uygulaması oluştur Blazor WebAssembly iletişim kutusunda Uygulama şablonunu seçtikten ASP.NET Core Kimlik Doğrulaması'nın altında Değiştir'i seçin.

  2. Kullanıcı hesaplarını uygulama içinde depola seçeneğiyle Bireysel Kullanıcı Hesapları'ASP.NET Core Identity seçin. Bu seçim kimlik doğrulaması desteği ekler ve kullanıcıların bir veritabanında depolanmasına neden değildir. Bu makalenin aşağıdaki bölümleri daha fazla ayrıntı sağlar.

Kimlik doğrulama paketi

Bireysel Kullanıcı Hesaplarını kullanmak için bir uygulama oluşturulduğunda, uygulama otomatik olarak uygulamanın proje dosyasında Microsoft.AspNetCore.Components.WebAssembly.Authentication paket için bir paket başvurusu alır. Paket, uygulamanın kullanıcıların kimliğini doğrulamasını ve korumalı API'leri çağıracak belirteçleri almasını sağlayan bir temel öğeler kümesi sağlar.

Uygulamaya kimlik doğrulaması ekliyorsanız paketi uygulamanın proje dosyasına el ile ekleyin:

<PackageReference 
  Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" 
  Version="{VERSION}" />

yer tutucusu için, uygulamanın paylaşılan çerçeve sürümüyle eşleşen paketin en son kararlı sürümü NuGet.org adresinde paketin Sürüm Geçmişi {VERSION} içinde bulunabilir.

Kimlik doğrulama hizmeti desteği

Kullanıcıların kimliklerini doğrulama desteği, paket tarafından sağlanan uzantı AddOidcAuthentication yöntemiyle hizmet kapsayıcısı içinde Microsoft.AspNetCore.Components.WebAssembly.Authentication kaydedilir. Bu yöntem, uygulamanın Sağlayıcı (IP) ile etkileşim kurması için Identity gereken hizmetleri ayarlar.

Yeni bir uygulama için aşağıdaki yapılandırmada {AUTHORITY} ve {CLIENT ID} yer tutucuları için değerler girin. Uygulamanın IP'sini kullanmak için gereken diğer yapılandırma değerlerini sağlama. Örnek, , ve gerektiren PostLogoutRedirectUri RedirectUri Google'a ResponseType göredir. Bir uygulamaya kimlik doğrulaması ekliyorsanız, aşağıdaki kodu ve yapılandırmayı uygulamaya yer tutucular ve diğer yapılandırma değerleriyle el ile ekleyin.

Program.cs:

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

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

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

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": "id_token"
  }
}

Yeniden yönlendirme URI'si ( ), Google API'leri konsolunda Kimlik Bilgileri Yetkili yeniden yönlendirme URI'leri'ne kaydedilir; https://localhost:5001/authentication/login-callback > {NAME} > {NAME} burada, Google API'leri konsollarının OAuth 2.0 İstemci Kimlikleri uygulama listesinde uygulamanın istemci adıdır.

Tek başına uygulamalar için kimlik doğrulama desteği, OpenID Bağlan (OIDC) kullanılarak sunulur. 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 edinebilirsiniz. Uygulamayı kaydeden değerleri alın. Bu değerler genellikle çevrimiçi portallarında gerçekleşir.

Erişim belirteci kapsamları

Şablon, Blazor WebAssembly ve için varsayılan kapsamları otomatik olarak openid profile yapılandırıyor.

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

Program.cs:

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

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

İçeri aktarma dosyası

Ad Microsoft.AspNetCore.Components.Authorization alanı, dosya aracılığıyla uygulamanın her yerinde kullanılabilir _Imports.razor yapılır:

@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 içinde tanımlayan bir komut dosyası içerir AuthenticationService . AuthenticationService OıDC protokolünün alt düzey ayrıntılarını işler. Uygulama, kimlik doğrulama işlemlerini gerçekleştirmek için komut dosyasında tanımlanan yöntemleri dahili olarak çağırır.

<script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/
    AuthenticationService.js"></script>

Uygulama bileşeni

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

  • Bileşeni, CascadingAuthenticationState uygulamanın geri AuthenticationState kalanına ifşayı yönetir.
  • Bileşen, AuthorizeRouteView geçerli kullanıcının belirli bir sayfaya erişme yetkisine sahip olduğundan veya başka bir şekilde bileşeni işlemeye yetkili olduğundan emin RedirectToLogin olur.
  • Bileşen, RedirectToLogin yetkisiz kullanıcıları oturum açma sayfasına yeniden yönlendirmeyi yönetir.

ASP.NET Core'nin yayınlarında çerçevede yapılan değişikliklerden dolayı, bu bölümde Razor App bileşenin ( App.razor ) işaretlemesi gösterilmez. Bileşenin verilen bir sürüme yönelik işaretlemelerini incelemek için aşağıdaki yaklaşımlardan birini kullanın:

  • Kullanmak istediğiniz uygulamanın sürümü için varsayılan proje şablonundan kimlik Blazor WebAssembly doğrulaması için ASP.NET Core bir uygulama oluşturun. Oluşturulan App uygulamada bileşeni App.razor ( ) inceleme.

  • Başvuru App kaynağında App.razor bileşeni ( ) inceleme.

    Not

    Belge, ASP.NET Core kaynağı yüklemesi için ürün biriminin bir sonraki sürümü için geçerli geliştirmeyi temsil eden deponun dal main ASP.NET Core. Farklı bir sürümün dallarını seçmek için Dalları veya etiketleri değiştir açılan listesini kullanarak dalı seçin. Örneğin, ASP.NET Core release/5.0 5.0 sürümü için dalı seçin.

RedirectToLogin bileşeni

RedirectToLoginBileşen ( Shared/RedirectToLogin.razor ):

  • Yetkisiz kullanıcıların oturum açma sayfasına yeniden yönlendirildiğini yönetir.
  • Kimlik doğrulaması başarılı olursa bu sayfaya döndürülmeleri için kullanıcının erişmeye çalışan geçerli URL 'YI korur.
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateTo(
            $"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
    }
}

LoginDisplay bileşeni

Bileşeni LoginDisplay ( Shared/LoginDisplay.razor ) bileşeninde işlenir ( ) ve aşağıdaki MainLayout davranışları Shared/MainLayout.razor yönetir:

  • Kimliği doğrulanmış kullanıcılar için:
    • Geçerli kullanıcı adını görüntüler.
    • Uygulamada oturumun açık olduğu bir düğme sunar.
  • Anonim kullanıcılar için oturum açma seçeneği sunar.
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@inject NavigationManager Navigation
@inject SignOutSessionStateManager SignOutManager

<AuthorizeView>
    <Authorized>
        Hello, @context.User.Identity.Name!
        <button class="nav-link btn btn-link" @onclick="BeginSignOut">
            Log out
        </button>
    </Authorized>
    <NotAuthorized>
        <a href="authentication/login">Log in</a>
    </NotAuthorized>
</AuthorizeView>

@code {
    private async Task BeginSignOut(MouseEventArgs args)
    {
        await SignOutManager.SetSignOutState();
        Navigation.NavigateTo("authentication/logout");
    }
}

Kimlik doğrulama bileşeni

Bileşeni ( ) tarafından Authentication üretilen Pages/Authentication.razor sayfa, farklı kimlik doğrulama aşamalarını işleme için gereken yolları tanımlar.

RemoteAuthenticatorViewBileşen:

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

<RemoteAuthenticatorView Action="@Action" />

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

Sorun giderme

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ırma nedeniyle oluşur. Aşağıda birkaç örnek verilmiştir:

    • Senaryonun gereksinimlerine bağlı olarak, eksik veya yanlış bir yetkili, örnek, kiracı KIMLIĞI, kiracı etki alanı, Istemci KIMLIĞI veya yeniden yönlendirme URI 'SI, bir uygulamanın istemcilerin kimliğini doğrulamasını önler.
    • Yanlış bir erişim belirteci kapsamı, istemcilerin sunucu Web API uç noktalarına erişmesini önler.
    • Yanlış veya eksik sunucu API izinleri istemcilerin sunucu Web API uç noktalarına erişmesini önler.
    • Uygulamayı, sağlayıcının uygulama kaydının yeniden yönlendirme URI 'sinde yapılandırılmış olandan farklı bir bağlantı noktasında çalıştırmak Identity .

    Bu makalenin kılavuzunun yapılandırma bölümlerinde doğru yapılandırma örnekleri gösterilmektedir. Uygulama ve IP yanlış yapılandırmayla ilgili makalenin her bölümüne dikkatle göz atın.

    Yapılandırma doğru görünüyorsa:

    • Uygulama günlüklerini analiz edin.

    • Tarayıcı geliştirici araçlarıyla istemci uygulaması ile IP veya sunucu uygulaması arasındaki ağ trafiğini inceleyin. Genellikle, bir istek yapıldıktan sonra, hataya neden olan bir hata iletisi veya bir sorun olduğunu bir ileti, IP veya sunucu uygulaması tarafından istemciye döndürülür. Geliştirici araçları Kılavuzu aşağıdaki makalelerde bulunur:

    • Bir istemcinin kimliğini doğrulamak için kullanılan bir JSON Web Token (JWT) içeriğinin kodunu çözün veya sorunun nerede oluştuğunu bağlı olarak bir sunucu Web API 'sine erişim. Daha fazla bilgi için bkz. bir JSON Web token (JWT) Içeriğini İnceleme.

    Belgeler, makalelerdeki belge geri bildirimlerine ve hatalara yanıt veriyor ( Bu sayfa geri bildirimi bölümünden bir sorun açar), ancak ürün desteği sağlayamadı. Bir uygulamanın sorunlarını gidermeye yardımcı olmak için çeşitli genel destek forumları vardır. Şunları öneririz:

    Önceki Forumlar Microsoft tarafından sahip değil veya denetlenmiyor.

    güvenlikle ilgili olmayan, hassas olmayan ve gizli olmayan bir dizi framework hata raporu için ASP.NET Core ürün birimiyle bir sorun açın. Bir sorunun nedenini iyice araştırmadan ve bir genel destek forumundaki topluluk yardımıyla, ürün birimiyle ilgili bir sorun açmayın. Ürün birimi, basit yanlış yapılandırma veya üçüncü taraf hizmetleri içeren durumlar nedeniyle bozuk olan ayrı uygulamalarla ilgili sorunları gideremez. bir rapor hassas veya gizli ise ve saldırganların yararlanabilecek potansiyel bir güvenlik kusurunu kullanıyorsa, bkz. raporlama güvenlik sorunları ve hataları (dotnet/aspnetcore GitHub repository).

  • AAD için yetkisiz istemci

    bilgi: Microsoft. AspNetCore. Authorization. DefaultAuthorizationService [2] yetkilendirmesi başarısız oldu. Bu gereksinimler karşılanmadı: DenyAnonymousAuthorizationRequirement: kimliği doğrulanmış bir kullanıcı gerektirir.

    AAD oturum açma geri çağırma hatası:

    • Hata: unauthorized_client
    • Açıklaması AADB2C90058: The provided application is not configured to allow public clients.

    Hatayı gidermek için:

    1. Azure portal, uygulamanın bildirimineerişin.
    2. allowPublicClient Özniteliğini veya olarak ayarlayın null true .

Cookies ve site verileri

Cookies ve site verileri, uygulama güncelleştirmelerinde devam edebilir ve test ve sorun giderme işlemlerini etkileyebilir. Uygulama kodu değişiklikleri yaparken, sağlayıcı ile Kullanıcı hesabı değişiklikleri veya sağlayıcı uygulama yapılandırma değişiklikleri yaparken aşağıdakileri temizleyin:

  • Kullanıcı oturum açma cookie öğeleri
  • Uygulama cookie s
  • Önbelleğe alınmış ve depolanan site verileri

Kalan cookie s ve site verilerinin test ve sorun giderme konusunda kesintiye uğramasını önleyen bir yaklaşım:

  • Tarayıcı yapılandırma
    • cookieTarayıcı her kapatıldığında tüm ve site verilerini silmek üzere yapılandırabileceğiniz test için bir tarayıcı kullanın.
    • Uygulamanın, test kullanıcısının veya sağlayıcı yapılandırmasının herhangi bir değişikliği için tarayıcının el ile veya IDE tarafından kapatıldığından emin olun.
  • Visual Studio ' deki bir tarayıcıyı veya özel modda açmak için özel bir komut kullanın:
    • Visual Studio çalıştır düğmesinden , 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 konuma yüklenirse veya Windows 10 kullanmıyorsanız, tarayıcının yürütülebilir dosyasının yolunu belirtin.
      • 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 ınbilito veya Private modunda 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: Use --incognito --new-window {URL} , yer tutucunun {URL} açılacağı URL (örneğin, https://localhost:5001 ).
      • Mozilla Firefox: Use -private -url {URL} , yer tutucunun {URL} açılacağı URL (örneğin, https://localhost:5001 ).
    • Kolay ad alanına bir ad girin. Örneğin, Firefox Auth Testing.
    • Tamam düğmesini seçin.
    • Her bir uygulamayla test yinelemesi için tarayıcı profilini seçmek zorunda kalmamak için, profili varsayılan olarak Ayarla düğmesi ile varsayılan olarak ayarlayın.
    • Uygulamanın, test kullanıcısının veya sağlayıcı yapılandırmasındaki herhangi bir değişiklik için, tarayıcının IDE tarafından kapatıldığından emin olun.

Uygulama yükseltmeleri

Çalışan bir uygulama, geliştirme makinesindeki .NET Core SDK yükseltmeden veya uygulama içindeki paket sürümlerini değiştirirken hemen başarısız olabilir. Bazı durumlarda, önemli paketler ana yükseltmeler gerçekleştirirken bir uygulamayı bozabilir. Bu sorunların çoğu aşağıdaki yönergeleri izleyerek düzeltilebilir:

  1. bir komut kabuğundan yürüterek yerel sistemin NuGet paketi önbelleklerini temizleyin dotnet nuget locals all --clear .
  2. Proje bin ve obj klasörlerini silin.
  3. Projeyi geri yükleyin ve yeniden derleyin.
  4. Uygulamayı yeniden dağıtmadan önce sunucusundaki dağıtım klasöründeki tüm dosyaları silin.

Not

Uygulamanın hedef çerçevesiyle uyumsuz paket sürümlerinin kullanımı desteklenmez. bir paket hakkında daha fazla bilgi için NuGet galerisi veya fuget paket gezgininikullanın.

Sunucu uygulamasını çalıştırma

Barındırılan bir çözümü test etmek ve sorunlarını giderirken Blazor , uygulamayı projeden çalıştırdığınızdan emin olun Server . örneğin Visual Studio ' de, aşağıdaki yaklaşımlardan biriyle uygulamaya başlamadan önce sunucu projesinin Çözüm Gezgini vurgulandığını doğrulayın:

  • Çalıştır düğmesini seçin.
  • Menüden hata > ayıklamayı Başlat komutunu kullanın.
  • F5tuşuna basın.

JSON Web Token (JWT) içeriğini İnceleme

Bir JSON Web Token (JWT) kodunu çözmek için Microsoft 'un JWT.MS aracını kullanın. Kullanıcı arabirimindeki değerler hiçbir şekilde tarayıcınızdan bırakmayın.

Örnek kodlanmış JWT (görüntülenmek üzere kısaltıldı):

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j ... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q

Azure AAD B2C 'da kimlik doğrulayan bir uygulama için araç tarafından kodu çö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

B2C Azure Active Directory (AAD) ve Azure Active Directory B2C (AAD B2C) için bu konudaki yönergeleri izleyin. Bu içindekiler AAD B2C AAD konu başlıklarına bakın.

Kitaplığı kullanan tek Blazor WebAssembly başına bir Microsoft.AspNetCore.Components.WebAssembly.Authentication uygulama oluşturmak için, araç seçiminize yönelik yönergeleri izleyin. Kimlik doğrulaması desteği ekliyorsanız, uygulamayı ayarlama ve yapılandırma konusunda rehberlik için bu makalenin aşağıdaki bölümlerine bakın.

Not

Sağlayıcı Identity (IP), OpenID Bağlan (OIDC) kullan gerekir. Örneğin, Facebook'un IP'si OIDC uyumlu bir sağlayıcı değildir, bu nedenle bu konudaki kılavuz Facebook IP'leriyle birlikte çalışmaz. Daha fazla bilgi için bkz. Güvenli ASP.NET Core Blazor WebAssembly.

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

  1. Web Uygulaması oluştur Blazor WebAssembly iletişim kutusunda Uygulama şablonunu seçtikten ASP.NET Core Kimlik Doğrulaması'nın altında Değiştir'i seçin.

  2. Kullanıcı hesaplarını uygulama içinde depola seçeneğiyle Bireysel Kullanıcı Hesapları'ASP.NET Core Identity seçin. Bu seçim kimlik doğrulaması desteği ekler ve kullanıcıların bir veritabanında depolanmasına neden değildir. Bu makalenin aşağıdaki bölümleri daha fazla ayrıntı sağlar.

Kimlik doğrulama paketi

Bireysel Kullanıcı Hesaplarını kullanmak için bir uygulama oluşturulduğunda, uygulama otomatik olarak uygulamanın proje dosyasında Microsoft.AspNetCore.Components.WebAssembly.Authentication paket için bir paket başvurusu alır. Paket, uygulamanın kullanıcıların kimliğini doğrulamasını ve korumalı API'leri çağıracak belirteçleri almasını sağlayan bir temel öğeler kümesi sağlar.

Uygulamaya kimlik doğrulaması ekliyorsanız paketi uygulamanın proje dosyasına el ile ekleyin:

<PackageReference 
  Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" 
  Version="{VERSION}" />

yer tutucusu için, uygulamanın paylaşılan çerçeve sürümüyle eşleşen paketin en son kararlı sürümü NuGet.org adresinde paketin Sürüm Geçmişi {VERSION} içinde bulunabilir.

Kimlik doğrulama hizmeti desteği

Kullanıcıların kimliklerini doğrulama desteği, paket tarafından sağlanan uzantı AddOidcAuthentication yöntemiyle hizmet kapsayıcısı içinde Microsoft.AspNetCore.Components.WebAssembly.Authentication kaydedilir. Bu yöntem, uygulamanın Sağlayıcı (IP) ile etkileşim kurması için Identity gereken hizmetleri ayarlar.

Yeni bir uygulama için aşağıdaki yapılandırmada {AUTHORITY} ve {CLIENT ID} yer tutucuları için değerler girin. Uygulamanın IP'sini kullanmak için gereken diğer yapılandırma değerlerini sağlama. Örnek, , ve gerektiren PostLogoutRedirectUri RedirectUri Google'a ResponseType göredir. Bir uygulamaya kimlik doğrulaması ekliyorsanız, aşağıdaki kodu ve yapılandırmayı uygulamaya yer tutucular ve diğer yapılandırma değerleriyle el ile ekleyin.

Program.cs:

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

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

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

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": "id_token"
  }
}

Yeniden yönlendirme URI'si ( ), Google API'leri konsolunda Kimlik Bilgileri Yetkili yeniden yönlendirme URI'leri'ne kaydedilir; https://localhost:5001/authentication/login-callback > {NAME} > {NAME} burada, Google API'leri konsollarının OAuth 2.0 İstemci Kimlikleri uygulama listesinde uygulamanın istemci adıdır.

Tek başına uygulamalar için kimlik doğrulama desteği, OpenID Bağlan (OIDC) kullanılarak sunulur. 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 edinebilirsiniz. Uygulamayı kaydeden değerleri alın. Bu değerler genellikle çevrimiçi portallarında gerçekleşir.

Erişim belirteci kapsamları

Şablon, Blazor WebAssembly ve için varsayılan kapsamları otomatik olarak openid profile yapılandırıyor.

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

Program.cs:

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

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

İçeri aktarma dosyası

Ad Microsoft.AspNetCore.Components.Authorization alanı, dosya aracılığıyla uygulamanın her yerinde kullanılabilir _Imports.razor yapılır:

@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 içinde tanımlayan bir komut dosyası içerir AuthenticationService . AuthenticationService OıDC protokolünün alt düzey ayrıntılarını işler. Uygulama, kimlik doğrulama işlemlerini gerçekleştirmek için komut dosyasında tanımlanan yöntemleri dahili olarak çağırır.

<script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/
    AuthenticationService.js"></script>

Uygulama bileşeni

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

  • Bileşeni, CascadingAuthenticationState uygulamanın geri AuthenticationState kalanına ifşayı yönetir.
  • Bileşen, AuthorizeRouteView geçerli kullanıcının belirli bir sayfaya erişme yetkisine sahip olduğundan veya başka bir şekilde bileşeni işlemeye yetkili olduğundan emin RedirectToLogin olur.
  • Bileşen, RedirectToLogin yetkisiz kullanıcıları oturum açma sayfasına yeniden yönlendirmeyi yönetir.

ASP.NET Core'nin yayınlarında çerçevede yapılan değişikliklerden dolayı, bu bölümde Razor App bileşenin ( App.razor ) işaretlemesi gösterilmez. Bileşenin verilen bir sürüme yönelik işaretlemelerini incelemek için aşağıdaki yaklaşımlardan birini kullanın:

  • Kullanmak istediğiniz uygulamanın sürümü için varsayılan proje şablonundan kimlik Blazor WebAssembly doğrulaması için ASP.NET Core bir uygulama oluşturun. Oluşturulan App uygulamada bileşeni App.razor ( ) inceleme.

  • Başvuru App kaynağında App.razor bileşeni ( ) inceleme.

    Not

    Belge, ASP.NET Core kaynağı yüklemesi için ürün biriminin bir sonraki sürümü için geçerli geliştirmeyi temsil eden deponun dal main ASP.NET Core. Farklı bir sürümün dallarını seçmek için Dalları veya etiketleri değiştir açılan listesini kullanarak dalı seçin. Örneğin, ASP.NET Core release/5.0 5.0 sürümü için dalı seçin.

RedirectToLogin bileşeni

RedirectToLoginBileşen ( Shared/RedirectToLogin.razor ):

  • Yetkisiz kullanıcıların oturum açma sayfasına yeniden yönlendirildiğini yönetir.
  • Kimlik doğrulaması başarılı olursa bu sayfaya döndürülmeleri için kullanıcının erişmeye çalışan geçerli URL 'YI korur.
@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateTo(
            $"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
    }
}

LoginDisplay bileşeni

Bileşeni LoginDisplay ( Shared/LoginDisplay.razor ) bileşeninde işlenir ( ) ve aşağıdaki MainLayout davranışları Shared/MainLayout.razor yönetir:

  • Kimliği doğrulanmış kullanıcılar için:
    • Geçerli kullanıcı adını görüntüler.
    • Uygulamada oturumun açık olduğu bir düğme sunar.
  • Anonim kullanıcılar için oturum açma seçeneği sunar.
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@inject NavigationManager Navigation
@inject SignOutSessionStateManager SignOutManager

<AuthorizeView>
    <Authorized>
        Hello, @context.User.Identity.Name!
        <button class="nav-link btn btn-link" @onclick="BeginSignOut">
            Log out
        </button>
    </Authorized>
    <NotAuthorized>
        <a href="authentication/login">Log in</a>
    </NotAuthorized>
</AuthorizeView>

@code {
    private async Task BeginSignOut(MouseEventArgs args)
    {
        await SignOutManager.SetSignOutState();
        Navigation.NavigateTo("authentication/logout");
    }
}

Kimlik doğrulama bileşeni

Bileşeni ( ) tarafından Authentication üretilen Pages/Authentication.razor sayfa, farklı kimlik doğrulama aşamalarını işleme için gereken yolları tanımlar.

RemoteAuthenticatorViewBileşen:

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

<RemoteAuthenticatorView Action="@Action" />

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

Sorun giderme

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ırma nedeniyle oluşur. Aşağıda birkaç örnek verilmiştir:

    • Senaryonun gereksinimlerine bağlı olarak, eksik veya yanlış bir yetkili, örnek, kiracı KIMLIĞI, kiracı etki alanı, Istemci KIMLIĞI veya yeniden yönlendirme URI 'SI, bir uygulamanın istemcilerin kimliğini doğrulamasını önler.
    • Yanlış bir erişim belirteci kapsamı, istemcilerin sunucu Web API uç noktalarına erişmesini önler.
    • Yanlış veya eksik sunucu API izinleri istemcilerin sunucu Web API uç noktalarına erişmesini önler.
    • Uygulamayı, sağlayıcının uygulama kaydının yeniden yönlendirme URI 'sinde yapılandırılmış olandan farklı bir bağlantı noktasında çalıştırmak Identity .

    Bu makalenin kılavuzunun yapılandırma bölümlerinde doğru yapılandırma örnekleri gösterilmektedir. Uygulama ve IP yanlış yapılandırmayla ilgili makalenin her bölümüne dikkatle göz atın.

    Yapılandırma doğru görünüyorsa:

    • Uygulama günlüklerini analiz edin.

    • Tarayıcı geliştirici araçlarıyla istemci uygulaması ile IP veya sunucu uygulaması arasındaki ağ trafiğini inceleyin. Genellikle, bir istek yapıldıktan sonra, hataya neden olan bir hata iletisi veya bir sorun olduğunu bir ileti, IP veya sunucu uygulaması tarafından istemciye döndürülür. Geliştirici araçları Kılavuzu aşağıdaki makalelerde bulunur:

    • Bir istemcinin kimliğini doğrulamak için kullanılan bir JSON Web Token (JWT) içeriğinin kodunu çözün veya sorunun nerede oluştuğunu bağlı olarak bir sunucu Web API 'sine erişim. Daha fazla bilgi için bkz. bir JSON Web token (JWT) Içeriğini İnceleme.

    Belgeler, makalelerdeki belge geri bildirimlerine ve hatalara yanıt veriyor ( Bu sayfa geri bildirimi bölümünden bir sorun açar), ancak ürün desteği sağlayamadı. Bir uygulamanın sorunlarını gidermeye yardımcı olmak için çeşitli genel destek forumları vardır. Şunları öneririz:

    Önceki Forumlar Microsoft tarafından sahip değil veya denetlenmiyor.

    güvenlikle ilgili olmayan, hassas olmayan ve gizli olmayan bir dizi framework hata raporu için ASP.NET Core ürün birimiyle bir sorun açın. Bir sorunun nedenini iyice araştırmadan ve bir genel destek forumundaki topluluk yardımıyla, ürün birimiyle ilgili bir sorun açmayın. Ürün birimi, basit yanlış yapılandırma veya üçüncü taraf hizmetleri içeren durumlar nedeniyle bozuk olan ayrı uygulamalarla ilgili sorunları gideremez. bir rapor hassas veya gizli ise ve saldırganların yararlanabilecek potansiyel bir güvenlik kusurunu kullanıyorsa, bkz. raporlama güvenlik sorunları ve hataları (dotnet/aspnetcore GitHub repository).

  • AAD için yetkisiz istemci

    bilgi: Microsoft. AspNetCore. Authorization. DefaultAuthorizationService [2] yetkilendirmesi başarısız oldu. Bu gereksinimler karşılanmadı: DenyAnonymousAuthorizationRequirement: kimliği doğrulanmış bir kullanıcı gerektirir.

    AAD oturum açma geri çağırma hatası:

    • Hata: unauthorized_client
    • Açıklaması AADB2C90058: The provided application is not configured to allow public clients.

    Hatayı gidermek için:

    1. Azure portal, uygulamanın bildirimineerişin.
    2. allowPublicClient Özniteliğini veya olarak ayarlayın null true .

Cookies ve site verileri

Cookies ve site verileri, uygulama güncelleştirmelerinde devam edebilir ve test ve sorun giderme işlemlerini etkileyebilir. Uygulama kodu değişiklikleri yaparken, sağlayıcı ile Kullanıcı hesabı değişiklikleri veya sağlayıcı uygulama yapılandırma değişiklikleri yaparken aşağıdakileri temizleyin:

  • Kullanıcı oturum açma cookie öğeleri
  • Uygulama cookie s
  • Önbelleğe alınmış ve depolanan site verileri

Kalan cookie s ve site verilerinin test ve sorun giderme konusunda kesintiye uğramasını önleyen bir yaklaşım:

  • Tarayıcı yapılandırma
    • cookieTarayıcı her kapatıldığında tüm ve site verilerini silmek üzere yapılandırabileceğiniz test için bir tarayıcı kullanın.
    • Uygulamanın, test kullanıcısının veya sağlayıcı yapılandırmasının herhangi bir değişikliği için tarayıcının el ile veya IDE tarafından kapatıldığından emin olun.
  • Visual Studio ' deki bir tarayıcıyı veya özel modda açmak için özel bir komut kullanın:
    • Visual Studio çalıştır düğmesinden , 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 konuma yüklenirse veya Windows 10 kullanmıyorsanız, tarayıcının yürütülebilir dosyasının yolunu belirtin.
      • 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 ınbilito veya Private modunda 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: Use --incognito --new-window {URL} , yer tutucunun {URL} açılacağı URL (örneğin, https://localhost:5001 ).
      • Mozilla Firefox: Use -private -url {URL} , yer tutucunun {URL} açılacağı URL (örneğin, https://localhost:5001 ).
    • Kolay ad alanına bir ad girin. Örneğin, Firefox Auth Testing.
    • Tamam düğmesini seçin.
    • Her bir uygulamayla test yinelemesi için tarayıcı profilini seçmek zorunda kalmamak için, profili varsayılan olarak Ayarla düğmesi ile varsayılan olarak ayarlayın.
    • Uygulamanın, test kullanıcısının veya sağlayıcı yapılandırmasındaki herhangi bir değişiklik için, tarayıcının IDE tarafından kapatıldığından emin olun.

Uygulama yükseltmeleri

Çalışan bir uygulama, geliştirme makinesindeki .NET Core SDK yükseltmeden veya uygulama içindeki paket sürümlerini değiştirirken hemen başarısız olabilir. Bazı durumlarda, önemli paketler ana yükseltmeler gerçekleştirirken bir uygulamayı bozabilir. Bu sorunların çoğu aşağıdaki yönergeleri izleyerek düzeltilebilir:

  1. bir komut kabuğundan yürüterek yerel sistemin NuGet paketi önbelleklerini temizleyin dotnet nuget locals all --clear .
  2. Proje bin ve obj klasörlerini silin.
  3. Projeyi geri yükleyin ve yeniden derleyin.
  4. Uygulamayı yeniden dağıtmadan önce sunucusundaki dağıtım klasöründeki tüm dosyaları silin.

Not

Uygulamanın hedef çerçevesiyle uyumsuz paket sürümlerinin kullanımı desteklenmez. bir paket hakkında daha fazla bilgi için NuGet galerisi veya fuget paket gezgininikullanın.

Sunucu uygulamasını çalıştırma

Barındırılan bir çözümü test etmek ve sorunlarını giderirken Blazor , uygulamayı projeden çalıştırdığınızdan emin olun Server . örneğin Visual Studio ' de, aşağıdaki yaklaşımlardan biriyle uygulamaya başlamadan önce sunucu projesinin Çözüm Gezgini vurgulandığını doğrulayın:

  • Çalıştır düğmesini seçin.
  • Menüden hata > ayıklamayı Başlat komutunu kullanın.
  • F5tuşuna basın.

JSON Web Token (JWT) içeriğini İnceleme

Bir JSON Web Token (JWT) kodunu çözmek için Microsoft 'un JWT.MS aracını kullanın. Kullanıcı arabirimindeki değerler hiçbir şekilde tarayıcınızdan bırakmayın.

Örnek kodlanmış JWT (görüntülenmek üzere kısaltıldı):

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1j ... bQdHBHGcQQRbW7Wmo6SWYG4V_bU55Ug_PW4pLPr20tTS8Ct7_uwy9DWrzCMzpD-EiwT5IjXwlGX3IXVjHIlX50IVIydBoPQtadvT7saKo1G5Jmutgq41o-dmz6-yBMKV2_nXA25Q

Azure AAD B2C 'da kimlik doğrulayan bir uygulama için araç tarafından kodu çö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