/
ivanstrike
/
tasker
Обзор
Документация
Войти
/
ivanstrike
/
tasker
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Services/JwtService.cs
85 строк
3 KB
ivanstrike
Init
20 окт 2025, 00:25
20 окт 2025, 00:25
db81298
Код
Авторство
О чём код?
using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; using Microsoft.IdentityModel.Tokens; using TaskerApi.Models; namespace TaskerApi.Services; /// <summary> /// Сервис для работы с JWT токенами /// </summary> public interface IJwtService { string GenerateToken(User user); ClaimsPrincipal? ValidateToken(string token); } public class JwtService : IJwtService { private readonly IConfiguration _configuration; public JwtService(IConfiguration configuration) { _configuration = configuration; } public string GenerateToken(User user) { var secretKey = _configuration["JwtSettings:SecretKey"]!; var issuer = _configuration["JwtSettings:Issuer"]!; var audience = _configuration["JwtSettings:Audience"]!; var expirationMinutes = int.Parse(_configuration["JwtSettings:ExpirationMinutes"]!); var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)); var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256); var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()), new Claim(JwtRegisteredClaimNames.UniqueName, user.Username), new Claim(JwtRegisteredClaimNames.Email, user.Email), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) }; var token = new JwtSecurityToken( issuer: issuer, audience: audience, claims: claims, expires: DateTime.UtcNow.AddMinutes(expirationMinutes), signingCredentials: credentials ); return new JwtSecurityTokenHandler().WriteToken(token); } public ClaimsPrincipal? ValidateToken(string token) { var secretKey = _configuration["JwtSettings:SecretKey"]!; var issuer = _configuration["JwtSettings:Issuer"]!; var audience = _configuration["JwtSettings:Audience"]!; var tokenHandler = new JwtSecurityTokenHandler(); var validationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)), ValidateIssuer = true, ValidIssuer = issuer, ValidateAudience = true, ValidAudience = audience, ValidateLifetime = true, ClockSkew = TimeSpan.Zero }; try { var principal = tokenHandler.ValidateToken(token, validationParameters, out _); return principal; } catch { return null; } } }