/
AMachine
/
MMDB_Backend
Обзор
Документация
Войти
/
AMachine
/
MMDB_Backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
MMDB.Application/TokensService.cs
70 строк
2 KB
AssaultMachine
add endpoint for db rows count
07 май 2025, 21:33
07 май 2025, 21:33
392519f
Код
Авторство
О чём код?
using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Security.Cryptography; using System.Text; using Microsoft.Extensions.Configuration; using Microsoft.IdentityModel.Tokens; using MMDB.Core.Abstract.Infrastructure; using MMDB.Core.Abstract.Repositories; using MMDB.Core.Abstract.Services; using MMDB.Core.Models; namespace MMDB.Application; public class TokensService(ITokensRepository tokensRepository, IConfiguration configuration) : ITokensService { public string GenerateAccessToken(User user) { var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.UTF8.GetBytes(configuration["JWTOptions:SecretKey"]!); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity([ new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.Role, user.IsAdmin!.Value ? "Admin" : "User"), ]), Expires = DateTime.UtcNow.AddMinutes(int.Parse(configuration["JWTOptions:AccessExpiresInMinutes"]!)), Issuer = configuration["JWTOptions:Issuer"]!, Audience = configuration["JWTOptions:Audience"]!, SigningCredentials = new SigningCredentials( new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; var token = tokenHandler.CreateToken(tokenDescriptor); return tokenHandler.WriteToken(token); } public async ValueTask<string> GenerateRefreshTokenAsync(User user) { var tokenBytes = new byte[32]; RandomNumberGenerator.Fill(tokenBytes); var token = Convert.ToBase64String(tokenBytes); await tokensRepository.RevokeAsync(user.Id); await tokensRepository.AddAsync(user.Id, token); return token; } public async ValueTask<bool> ValidateRefreshTokenAsync(string refreshToken) { var token = await tokensRepository.GetActiveTokenAsync(refreshToken); return token; } public async Task RevokeRefreshTokenAsync(User user) { await tokensRepository.RevokeAsync(user.Id); } public async Task<Guid?> GetUserIdByRefreshTokenAsync(string refreshToken) { var userId = await tokensRepository.GetUserIdByTokenAsync(refreshToken); return userId; } }