/
va1eriy
/
taskwards
Обзор
Документация
Войти
/
va1eriy
/
taskwards
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Taskwards.Web/Infrastructure/Auth/TaskwardsAuthStateProvider.cs
59 строк
2 KB
Valeriy Kokorev
feat: add auth infrastructure foundation (tasks 1.4-1.9)
23 фев 2026, 20:36
23 фев 2026, 20:36
de8f5b5
Код
Авторство
О чём код?
using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using Microsoft.AspNetCore.Components.Authorization; namespace Taskwards.Web.Infrastructure.Auth; /// <summary> /// Кастомный AuthenticationStateProvider для Blazor WASM на основе JWT токенов /// </summary> public class TaskwardsAuthStateProvider : AuthenticationStateProvider { private readonly ITokenStorageService _tokenStorage; public TaskwardsAuthStateProvider(ITokenStorageService tokenStorage) { _tokenStorage = tokenStorage; } public override async Task<AuthenticationState> GetAuthenticationStateAsync() { var token = await _tokenStorage.GetAccessTokenAsync(); if (string.IsNullOrEmpty(token)) return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())); var claims = ParseClaimsFromJwt(token); if (claims == null) return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())); var identity = new ClaimsIdentity(claims, "jwt"); return new AuthenticationState(new ClaimsPrincipal(identity)); } /// <summary> /// Уведомить об изменении состояния аутентификации (вызывать после login/logout) /// </summary> public void NotifyAuthStateChanged() { NotifyAuthenticationStateChanged(GetAuthenticationStateAsync()); } private static IEnumerable<Claim>? ParseClaimsFromJwt(string token) { try { var handler = new JwtSecurityTokenHandler(); var jwtToken = handler.ReadJwtToken(token); if (jwtToken.ValidTo < DateTime.UtcNow) return null; return jwtToken.Claims; } catch { return null; } } }