첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.

728x90
반응형
728x170
using Microsoft.IdentityModel.Tokens;
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

#region 클레임 주체 구하기 - GetClaimsPrincipal(token, secretKey)

/// <summary>
/// 클레임 주체 구하기
/// </summary>
/// <param name="token">토큰</param>
/// <param name="secretKey">비밀 키</param>
/// <returns>클레임 주체</returns>
public ClaimsPrincipal GetClaimsPrincipal(string token, string secretKey)
{
    TokenValidationParameters parameters = new()
    {
        ValidateIssuer           = false,
        ValidateAudience         = false,
        ValidateLifetime         = false,
        ValidateIssuerSigningKey = true,
        IssuerSigningKey         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)),
    };

    JwtSecurityTokenHandler tokenHandler = new();

    ClaimsPrincipal principal = tokenHandler.ValidateToken(token, parameters, out SecurityToken securityToken);

    if
    (
        securityToken is not JwtSecurityToken jwtSecurityToken ||
        !jwtSecurityToken.Header.Alg.Equals(SecurityAlgorithms.HmacSha256, StringComparison.InvariantCultureIgnoreCase)
    )
    {
        throw new SecurityTokenException("Invalid token");
    }

    return principal;
}

#endregion
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요