| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- using SharedKernel;
- using System.Security.Claims;
- using System.Security.Cryptography;
- using System.Text;
- using Application.Abstractions.Authentication;
- using Microsoft.Extensions.Options;
- using Microsoft.IdentityModel.JsonWebTokens;
- using Microsoft.IdentityModel.Tokens;
- namespace Infrastructure.Authentication;
- internal sealed class JwtTokenProvider(IOptions<AppSettings> options) : IJwtTokenProvider
- {
- private readonly AppSettings.JwtSection _jwt = options.Value.JWT;
- public string CreateAccessToken(int memberID, string email, string? name)
- {
- var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwt.SecretKey));
- var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
- var claims = new List<Claim>
- {
- new(JwtRegisteredClaimNames.Sub, memberID.ToString()),
- new(JwtRegisteredClaimNames.Email, email),
- new(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
- };
- if (!string.IsNullOrEmpty(name))
- {
- claims.Add(new Claim(JwtRegisteredClaimNames.Name, name));
- }
- var tokenDescriptor = new SecurityTokenDescriptor
- {
- Subject = new ClaimsIdentity(claims),
- Expires = DateTime.UtcNow.AddMinutes(_jwt.AccessTokenExpiration),
- SigningCredentials = credentials,
- Issuer = _jwt.Issuer,
- Audience = _jwt.Audience
- };
- var handler = new JsonWebTokenHandler();
- return handler.CreateToken(tokenDescriptor);
- }
- public string CreateRefreshToken()
- {
- var randomBytes = RandomNumberGenerator.GetBytes(64);
- return Convert.ToBase64String(randomBytes);
- }
- }
|