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

Scrie un comentariu

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