using DD.Persistence.Models.Configurations; using Microsoft.Extensions.Configuration; using Microsoft.IdentityModel.Tokens; using System.IdentityModel.Tokens.Jwt; using System.Net.Http.Headers; using System.Security.Claims; using System.Text.Json; namespace DD.Persistence.IntegrationTests; /// ///  Класс, позволяющий генерировать api-token /// public static class ApiTokenHelper { /// /// Метод авторизации /// /// /// /// public static void Authorize(this HttpClient httpClient, IConfiguration configuration) { var authUser = configuration .GetSection(nameof(AuthUser)) .Get()!; var jwtToken = authUser.CreateDefaultJwtToken(); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwtToken); } /// /// Авторизация через собственный jwt-токен /// /// /// private static string CreateDefaultJwtToken(this AuthUser authUser) { var nameIdetifier = Guid.NewGuid().ToString(); var claims = new List() { new(ClaimTypes.NameIdentifier, nameIdetifier), new("client_id", authUser.ClientId), new("username", authUser.Username), new("password", authUser.Password), new("grant_type", authUser.GrantType), new(ClaimTypes.NameIdentifier.ToString(), Guid.NewGuid().ToString()) }; var tokenDescriptor = new SecurityTokenDescriptor { Issuer = JwtParams.Issuer, Audience = JwtParams.Audience, Subject = new ClaimsIdentity(claims), Expires = DateTime.UtcNow.AddHours(1), SigningCredentials = new SigningCredentials(JwtParams.SecurityKey, SecurityAlgorithms.HmacSha256Signature) }; var tokenHandler = new JwtSecurityTokenHandler(); var token = tokenHandler.CreateToken(tokenDescriptor); return tokenHandler.WriteToken(token); } }