Контракты

This commit is contained in:
Халимов Рустам
2026-03-29 23:39:17 +03:00
parent 22bc964f27
commit 0209802e9e
141 changed files with 1292 additions and 725 deletions
@@ -1,14 +1,14 @@
using System.IdentityModel.Tokens.Jwt;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using Knot.Modules.Auth.Application.Abstractions;
using Knot.Modules.Auth.Contracts.Application.Abstractions;
using Knot.Modules.Auth.Domain;
namespace Knot.Modules.Auth.Infrastructure.Authentication;
public sealed class JwtTokenProvider : IJwtTokenProvider
internal sealed class JwtTokenProvider : IJwtTokenProvider
{
private readonly IConfiguration _configuration;
@@ -17,15 +17,13 @@ public sealed class JwtTokenProvider : IJwtTokenProvider
_configuration = configuration;
}
public string Generate(User user)
public string GenerateAccessToken(Guid userId, string username)
{
var claims = new Claim[]
{
new(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
new(JwtRegisteredClaimNames.UniqueName, user.Username),
new("name", user.DisplayName),
new(ClaimTypes.Name, user.DisplayName),
new("avatar", user.Avatar ?? string.Empty)
new(JwtRegisteredClaimNames.Sub, userId.ToString()),
new(JwtRegisteredClaimNames.UniqueName, username),
new(ClaimTypes.Name, username)
};
var secretKey = _configuration["Jwt:Secret"]!;
@@ -42,5 +40,43 @@ public sealed class JwtTokenProvider : IJwtTokenProvider
return new JwtSecurityTokenHandler().WriteToken(token);
}
}
public string GenerateRefreshToken()
{
var randomBytes = new byte[32];
using var rng = System.Security.Cryptography.RandomNumberGenerator.Create();
rng.GetBytes(randomBytes);
return Convert.ToBase64String(randomBytes);
}
public string Generate(Guid userId, string username, string displayName, string? avatar)
{
var claims = new Claim[]
{
new(JwtRegisteredClaimNames.Sub, userId.ToString()),
new(JwtRegisteredClaimNames.UniqueName, username),
new("name", displayName),
new(ClaimTypes.Name, displayName),
new("avatar", avatar ?? string.Empty)
};
var secretKey = _configuration["Jwt:Secret"]!;
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
_configuration["Jwt:Issuer"],
_configuration["Jwt:Audience"],
claims,
null,
DateTime.UtcNow.AddMinutes(double.Parse(_configuration["Jwt:ExpiryInMinutes"] ?? "1440")),
credentials);
return new JwtSecurityTokenHandler().WriteToken(token);
}
public string Generate(User user)
{
return Generate(user.Id, user.Username, user.DisplayName, user.Avatar);
}
}