38 lines
1.6 KiB
C#
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");
|
|
}
|
|
}
|