DurnyklyYol/DurnyklyYol.Blazor.Server/API/Security/JwtTokenProviderService.cs

38 lines
1.6 KiB
C#

using System.IdentityModel.Tokens.Jwt;
using System.Runtime.ExceptionServices;
using System.Security.Claims;
using System.Text;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Security;
using DevExpress.ExpressApp.Security.Authentication.ClientServer;
using Microsoft.IdentityModel.Tokens;
namespace DurnyklyYol.WebApi.JWT;
public class JwtTokenProviderService : IAuthenticationTokenProvider {
readonly SignInManager signInManager;
readonly IConfiguration configuration;
public JwtTokenProviderService(SignInManager signInManager, IConfiguration configuration) {
this.signInManager = signInManager;
this.configuration = configuration;
}
public string Authenticate(object logonParameters) {
var result = signInManager.AuthenticateByLogonParameters(logonParameters);
if(result.Succeeded) {
var issuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["Authentication:Jwt:IssuerSigningKey"]));
var token = new JwtSecurityToken(
issuer: configuration["Authentication:Jwt:Issuer"],
audience: configuration["Authentication:Jwt:Audience"],
claims: result.Principal.Claims,
expires: DateTime.Now.AddDays(2),
signingCredentials: new SigningCredentials(issuerSigningKey, SecurityAlgorithms.HmacSha256)
);
return new JwtSecurityTokenHandler().WriteToken(token);
}
if(result.Error is IUserFriendlyException) {
ExceptionDispatchInfo.Throw(result.Error);
}
throw new AuthenticationException("Internal server error");
}
}