optimise user context

master
Young 7 months ago
parent 34d8c417c8
commit 23aee0ab67

@ -2,7 +2,7 @@
namespace Infrastructure.HttpUserContext; namespace Infrastructure.HttpUserContext;
public interface IUserContext<TId> where TId : IEquatable<TId> public interface IUserContext<out TId> where TId : IEquatable<TId>
{ {
TId Id { get; } TId Id { get; }
@ -16,7 +16,7 @@ public interface IUserContext<TId> where TId : IEquatable<TId>
string RemoteIpAddress { get; } string RemoteIpAddress { get; }
JwtTokenInfo GenerateTokenInfo(); JwtTokenInfo GenerateTokenInfo(JwtSecurityToken jwtSecurityToken,double? duration, string schemeName);
IList<Claim> GetClaimsFromUserContext(); IList<Claim> GetClaimsFromUserContext();
} }

@ -28,20 +28,22 @@ public class UserContext<TId>(
public string RemoteIpAddress => httpContextAccessor.HttpContext?.GetRequestIp()!; public string RemoteIpAddress => httpContextAccessor.HttpContext?.GetRequestIp()!;
public JwtTokenInfo GenerateTokenInfo() public JwtTokenInfo GenerateTokenInfo(
JwtSecurityToken? securityToken = null,
double? duration = null,
string schemeName = JwtBearerDefaults.AuthenticationScheme)
{ {
var claims = GetClaimsFromUserContext(); var claims = GetClaimsFromUserContext();
var jwtToken = new JwtSecurityToken( securityToken ??= new JwtSecurityToken(
issuer: jwtOptions.Issuer, issuer: jwtOptions.Issuer,
audience: jwtOptions.Audience, audience: jwtOptions.Audience,
claims: claims, claims: claims,
notBefore: DateTime.Now, notBefore: DateTime.Now,
expires: DateTime.Now.AddSeconds(jwtOptions.Expiration), expires: DateTime.Now.AddSeconds(jwtOptions.Duration),
signingCredentials: jwtOptions.SigningCredentials); signingCredentials: jwtOptions.SigningCredentials);
var token = jwtSecurityTokenHandler.WriteToken(jwtToken); var token = jwtSecurityTokenHandler.WriteToken(securityToken);
token = encryptionService.Encrypt(token); token = encryptionService.Encrypt(token);
return new JwtTokenInfo(token, jwtOptions.Expiration, return new JwtTokenInfo(token, duration ?? jwtOptions.Duration, schemeName);
JwtBearerDefaults.AuthenticationScheme);
} }
public IList<Claim> GetClaimsFromUserContext() public IList<Claim> GetClaimsFromUserContext()
@ -55,7 +57,8 @@ public class UserContext<TId>(
new(JwtRegisteredClaimNames.Iat, new(JwtRegisteredClaimNames.Iat,
EpochTime.GetIntDate(DateTime.Now).ToString(CultureInfo.InvariantCulture), EpochTime.GetIntDate(DateTime.Now).ToString(CultureInfo.InvariantCulture),
ClaimValueTypes.Integer64), ClaimValueTypes.Integer64),
new(JwtRegisteredClaimNames.Exp, jwtOptions.Expiration.ToString()) new(JwtRegisteredClaimNames.Exp,
TimeSpan.FromSeconds(jwtOptions.Duration).ToString())
}; };
claims.AddRange(RoleIds.Select(rId => new Claim(ClaimTypes.Role, rId))); claims.AddRange(RoleIds.Select(rId => new Claim(ClaimTypes.Role, rId)));
return claims; return claims;

@ -5,14 +5,14 @@ namespace Infrastructure.Security;
public class JwtOptions( public class JwtOptions(
string issuer, string issuer,
string audience, string audience,
long expiration, long duration,
SigningCredentials credentials) SigningCredentials credentials)
{ {
public string Issuer { get; } = issuer; public string Issuer { get; } = issuer;
public string Audience { get; } = audience; public string Audience { get; } = audience;
public long Expiration { get; } = expiration; public long Duration { get; } = duration;
public SigningCredentials SigningCredentials { get; } = credentials; public SigningCredentials SigningCredentials { get; } = credentials;
} }
Loading…
Cancel
Save