Files
taxbaik/TaxBaik.Admin/Services/CustomAuthenticationStateProvider.cs
T
kjh2064 a039bb53a4 feat: JWT 토큰 기반 Admin 로그인 인증 완성
- AuthService로 JWT 토큰 생성 및 검증
- CustomAuthenticationStateProvider를 통한 Blazor 인증 통합
- LocalStorageService로 토큰 관리
- Login.razor 완전 재작성 (실제 DB 검증, 토큰 발급)
- BCrypt 기반 비밀번호 검증
- admin/admin123으로 테스트 가능

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-26 22:00:16 +09:00

60 lines
2.0 KiB
C#

using System.Security.Claims;
using Microsoft.AspNetCore.Components.Authorization;
namespace TaxBaik.Admin.Services;
public class CustomAuthenticationStateProvider : AuthenticationStateProvider
{
private readonly ILocalStorageService _localStorage;
private readonly AuthService _authService;
private readonly ILogger<CustomAuthenticationStateProvider> _logger;
public CustomAuthenticationStateProvider(ILocalStorageService localStorage, AuthService authService, ILogger<CustomAuthenticationStateProvider> logger)
{
_localStorage = localStorage;
_authService = authService;
_logger = logger;
}
public override async Task<AuthenticationState> GetAuthenticationStateAsync()
{
try
{
var token = await _localStorage.GetItemAsStringAsync("auth_token");
if (string.IsNullOrEmpty(token))
{
return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity()));
}
var principal = _authService.ValidateToken(token);
if (principal == null)
{
await _localStorage.RemoveItemAsync("auth_token");
return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity()));
}
return new AuthenticationState(principal);
}
catch (Exception ex)
{
_logger.LogError(ex, "인증 상태 조회 중 오류 발생");
return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity()));
}
}
public async Task LoginAsync(string token)
{
await _localStorage.SetItemAsStringAsync("auth_token", token);
var principal = _authService.ValidateToken(token);
NotifyAuthenticationStateChanged(GetAuthenticationStateAsync());
}
public async Task LogoutAsync()
{
await _localStorage.RemoveItemAsync("auth_token");
NotifyAuthenticationStateChanged(GetAuthenticationStateAsync());
}
}