Introducere în Autentificare în Blazor WebAssembly

  • Doru Bulubasa
  • 06 June 2025

Autentificarea este esențială în aplicații moderne. În Blazor WebAssembly, putem simula un sistem de login/logout folosind AuthenticationStateProvider personalizat.



🔧 1. Implementarea unui CustomAuthenticationStateProvider

public class CustomAuthStateProvider : AuthenticationStateProvider
{
    private ClaimsPrincipal _anonymous = new ClaimsPrincipal(new ClaimsIdentity());

    private ClaimsPrincipal _user;

    public override Task<AuthenticationState> GetAuthenticationStateAsync()
    {
        if (_user == null)
            return Task.FromResult(new AuthenticationState(_anonymous));

        return Task.FromResult(new AuthenticationState(_user));
    }

    public void Login(string username)
    {
        var identity = new ClaimsIdentity(new[]
        {
            new Claim(ClaimTypes.Name, username),
        }, "MockAuthentication");

        _user = new ClaimsPrincipal(identity);
        NotifyAuthenticationStateChanged(GetAuthenticationStateAsync());
    }

    public void Logout()
    {
        _user = null;
        NotifyAuthenticationStateChanged(GetAuthenticationStateAsync());
    }
}


🔧 2. Înregistrare în Program.cs

builder.Services.AddAuthorizationCore();
builder.Services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();


🧑‍💼 3. Pagina de Login (Pages/Login.razor)

@inject CustomAuthStateProvider AuthProvider
@inject NavigationManager Nav

<h3>Login</h3>

<input @bind="username" placeholder="Username" />
<button @onclick="PerformLogin">Login</button>

@code {
    private string username;

    private void PerformLogin()
    {
        AuthProvider.Login(username);
        Nav.NavigateTo("/");
    }
}


🔓 4. Logout (de exemplu, într-un meniu)

@inject CustomAuthStateProvider AuthProvider
<button @onclick="() => AuthProvider.Logout()">Logout</button>


🔐 5. Pagină protejată (Pages/Secure.razor)

@attribute [Authorize]
<h3>Informații protejate</h3>
<p>Doar utilizatorii logați pot vedea această pagină.</p>


🔁 6. Adăugăm App.razor cu CascadingAuthenticationState

<CascadingAuthenticationState>
    <Router AppAssembly="@typeof(App).Assembly">
        <Found Context="routeData">
            <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
        </Found>
        <NotFound>
            <p>Pagina nu a fost găsită.</p>
        </NotFound>
    </Router>
</CascadingAuthenticationState>


✅ 7. Redirect la login dacă utilizatorul nu e autentificat

@using Microsoft.AspNetCore.Components.Authorization
@inject NavigationManager Nav
@attribute [Authorize]

<AuthorizeView>
    <Authorized>
        @ChildContent
    </Authorized>
    <NotAuthorized>
        @code {
            protected override void OnInitialized()
            {
                Nav.NavigateTo("/login");
            }
        }
    </NotAuthorized>
</AuthorizeView>

📝 Rezumat

În acest articol ai învățat cum să:

  • Creezi un AuthenticationStateProvider customizat

  • Simulezi login/logout în Blazor WebAssembly

  • Protejezi paginile cu [Authorize]

  • Redirecționezi utilizatorii neautentificați

🤖 Întreabă AI despre acest articol

AI Răspuns generat de AI pe baza acestui articol.
AI scrie răspunsul…

Scrie un comentariu

Adresa de mail nu va fi publicata. Campurile obligatorii sunt marcate cu *