using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using Microsoft.AspNetCore.Mvc; using Microsoft.IdentityModel.Tokens; namespace TURN.Services.Chess.Controllers { public class TokenController : ControllerBase { /// /// получение bearer токена /// [Route("gettoken/{user}")] [HttpGet] public ActionResult GetToken(string user) { try { return HttpContext.Request.Query.TryGetValue("apikey", out var value) ? value.ToString() == Environment.GetEnvironmentVariable("AUTH_API_KEY") ? new JwtSecurityTokenHandler().WriteToken(CreateToken(user)) : StatusCode(403, "Wrong api key.") : StatusCode(401, "Api key not found."); } catch (Exception ex) { return StatusCode(500, $"Internal server error: {ex.Message}"); } } private SecurityToken CreateToken(string user) { var claims = new List() { new Claim(ClaimTypes.Name, user), new Claim(ClaimTypes.Role, "admin") }; return new JwtSecurityToken( issuer: AuthOptions.ISSUER, audience: AuthOptions.AUDIENCE, claims: claims, expires: DateTime.UtcNow.Add(TimeSpan.FromDays(30)), signingCredentials: new SigningCredentials( AuthOptions.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256)); } } }