44 lines
1.5 KiB
C#
44 lines
1.5 KiB
C#
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.IdentityModel.Tokens;
|
|
using System.IdentityModel.Tokens.Jwt;
|
|
using System.Security.Claims;
|
|
using System.Text;
|
|
|
|
namespace AssetManager.Services.Services;
|
|
|
|
public class JwtService
|
|
{
|
|
private readonly string _secretKey;
|
|
private readonly string _issuer;
|
|
private readonly string _audience;
|
|
|
|
public JwtService(IConfiguration configuration)
|
|
{
|
|
_secretKey = configuration["Jwt:SecretKey"] ?? "your-strong-secret-key-here-2026";
|
|
_issuer = configuration["Jwt:Issuer"] ?? "AssetManager";
|
|
_audience = configuration["Jwt:Audience"] ?? "AssetManager";
|
|
}
|
|
|
|
public string GenerateToken(string userId, string userName, string email)
|
|
{
|
|
var claims = new[]
|
|
{
|
|
new Claim(JwtRegisteredClaimNames.Sub, userId),
|
|
new Claim(JwtRegisteredClaimNames.Name, userName),
|
|
new Claim(JwtRegisteredClaimNames.Email, email),
|
|
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
|
|
};
|
|
|
|
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secretKey));
|
|
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
|
|
|
|
var token = new JwtSecurityToken(
|
|
issuer: _issuer,
|
|
audience: _audience,
|
|
claims: claims,
|
|
expires: DateTime.Now.AddHours(24),
|
|
signingCredentials: credentials);
|
|
|
|
return new JwtSecurityTokenHandler().WriteToken(token);
|
|
}
|
|
} |