From 23aee0ab674840ba9bc2ebc6adc13d76ba1237e8 Mon Sep 17 00:00:00 2001 From: Young Date: Tue, 15 Oct 2024 14:27:20 +0800 Subject: [PATCH] optimise user context --- .../HttpUserContext/IUserContext.cs | 4 ++-- .../HttpUserContext/UserContext.cs | 17 ++++++++++------- src/Infrastructure/Security/JwtOptions.cs | 4 ++-- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/Infrastructure/HttpUserContext/IUserContext.cs b/src/Infrastructure/HttpUserContext/IUserContext.cs index fcd9ba8..dc07605 100644 --- a/src/Infrastructure/HttpUserContext/IUserContext.cs +++ b/src/Infrastructure/HttpUserContext/IUserContext.cs @@ -2,7 +2,7 @@ namespace Infrastructure.HttpUserContext; -public interface IUserContext where TId : IEquatable +public interface IUserContext where TId : IEquatable { TId Id { get; } @@ -16,7 +16,7 @@ public interface IUserContext where TId : IEquatable string RemoteIpAddress { get; } - JwtTokenInfo GenerateTokenInfo(); + JwtTokenInfo GenerateTokenInfo(JwtSecurityToken jwtSecurityToken,double? duration, string schemeName); IList GetClaimsFromUserContext(); } \ No newline at end of file diff --git a/src/Infrastructure/HttpUserContext/UserContext.cs b/src/Infrastructure/HttpUserContext/UserContext.cs index 65536f3..5082a5b 100644 --- a/src/Infrastructure/HttpUserContext/UserContext.cs +++ b/src/Infrastructure/HttpUserContext/UserContext.cs @@ -28,20 +28,22 @@ public class UserContext( 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 jwtToken = new JwtSecurityToken( + securityToken ??= new JwtSecurityToken( issuer: jwtOptions.Issuer, audience: jwtOptions.Audience, claims: claims, notBefore: DateTime.Now, - expires: DateTime.Now.AddSeconds(jwtOptions.Expiration), + expires: DateTime.Now.AddSeconds(jwtOptions.Duration), signingCredentials: jwtOptions.SigningCredentials); - var token = jwtSecurityTokenHandler.WriteToken(jwtToken); + var token = jwtSecurityTokenHandler.WriteToken(securityToken); token = encryptionService.Encrypt(token); - return new JwtTokenInfo(token, jwtOptions.Expiration, - JwtBearerDefaults.AuthenticationScheme); + return new JwtTokenInfo(token, duration ?? jwtOptions.Duration, schemeName); } public IList GetClaimsFromUserContext() @@ -55,7 +57,8 @@ public class UserContext( new(JwtRegisteredClaimNames.Iat, EpochTime.GetIntDate(DateTime.Now).ToString(CultureInfo.InvariantCulture), 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))); return claims; diff --git a/src/Infrastructure/Security/JwtOptions.cs b/src/Infrastructure/Security/JwtOptions.cs index 92609a1..e646178 100644 --- a/src/Infrastructure/Security/JwtOptions.cs +++ b/src/Infrastructure/Security/JwtOptions.cs @@ -5,14 +5,14 @@ namespace Infrastructure.Security; public class JwtOptions( string issuer, string audience, - long expiration, + long duration, SigningCredentials credentials) { public string Issuer { get; } = issuer; public string Audience { get; } = audience; - public long Expiration { get; } = expiration; + public long Duration { get; } = duration; public SigningCredentials SigningCredentials { get; } = credentials; } \ No newline at end of file