feat(portal): 고객 포털 인증과 소셜 로그인 기반 추가

This commit is contained in:
2026-06-28 18:39:29 +09:00
parent 033883aac5
commit e2472b7ea1
20 changed files with 644 additions and 1 deletions
+70
View File
@@ -0,0 +1,70 @@
namespace TaxBaik.Web.Services;
using System.Security.Claims;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Identity;
using TaxBaik.Application.Services;
using TaxBaik.Domain.Entities;
public class PortalAuthService(
IHttpContextAccessor httpContextAccessor,
PortalUserService portalUserService)
{
private static readonly PasswordHasher<PortalUser> Hasher = new();
public async Task<bool> SignInAsync(string email, string password, CancellationToken ct = default)
{
var httpContext = httpContextAccessor.HttpContext
?? throw new InvalidOperationException("HTTP context is unavailable.");
var user = await portalUserService.GetByEmailAsync(email, ct);
if (user is null)
return false;
if (string.IsNullOrWhiteSpace(user.PasswordHash))
return false;
var verify = Hasher.VerifyHashedPassword(user, user.PasswordHash, password);
if (verify == PasswordVerificationResult.Failed)
return false;
var claims = new List<Claim>
{
new(ClaimTypes.NameIdentifier, user.Id.ToString()),
new(ClaimTypes.Name, user.Name),
new(ClaimTypes.Email, user.Email),
new("portal_user_id", user.Id.ToString())
};
if (user.ClientId.HasValue)
claims.Add(new("client_id", user.ClientId.Value.ToString()));
var identity = new ClaimsIdentity(claims, PortalAuthDefaults.Scheme);
var principal = new ClaimsPrincipal(identity);
await httpContext.SignInAsync(
PortalAuthDefaults.Scheme,
principal,
new AuthenticationProperties
{
IsPersistent = true
});
return true;
}
public static string HashPassword(string password)
{
var tempUser = new PortalUser();
return Hasher.HashPassword(tempUser, password);
}
public async Task SignOutAsync()
{
var httpContext = httpContextAccessor.HttpContext
?? throw new InvalidOperationException("HTTP context is unavailable.");
await httpContext.SignOutAsync(PortalAuthDefaults.Scheme);
}
}