更新JWT

This commit is contained in:
chfei committed 2026-10-23 19:28:17 +08:00
1 parent bb7162aaf6
commit 3769193696
16 files changed
+224 -141

No files matched your search

+7 -7
View File
@@ -21,11 +21,11 @@ public class TokenService : ITokenService
}
/// <inheritdoc />
public TokenResult CreateToken(IEnumerable<Claim> claims)
public TokenResult CreateToken(IEnumerable<Claim> claims, string? loginIp = null)
{
ArgumentNullException.ThrowIfNull(claims);
DateTime now = DateTime.Now;
DateTime now = DateTimeOffset.FromUnixTimeSeconds(DateTimeOffset.UtcNow.ToUnixTimeSeconds()).UtcDateTime;
DateTime expires = now.AddMinutes(_options.ExpiresMinutes);
string jti = Guid.NewGuid().ToString("N");
@@ -44,8 +44,8 @@ public class TokenService : ITokenService
SigningCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256),
});
// 注册在线会话(单点登录:同用户的新登录会顶替旧会话,旧令牌立即失效)
RegisterSession(allClaims, jti, now, expires);
// 持久化独立登录会话
RegisterSession(allClaims, jti, now, expires, loginIp);
return new TokenResult
{
@@ -73,7 +73,7 @@ public class TokenService : ITokenService
ClaimsPrincipal principal = new(result.ClaimsIdentity);
// 单点登录校验:会话必须仍然有效(未被退出、未被新登录顶替)
// 会话必须仍有效(未到期、未被撤销)
string? userName = principal.FindFirst(JwtClaimTypes.UserName)?.Value;
string? jti = principal.FindFirst(JwtClaimTypes.Jti)?.Value;
if (string.IsNullOrWhiteSpace(userName) || string.IsNullOrWhiteSpace(jti) || !_onlineUserStore.IsTokenActive(userName, jti))
@@ -92,7 +92,7 @@ public class TokenService : ITokenService
/// <summary>
/// 将令牌声明注册为在线会话。
/// </summary>
private void RegisterSession(IEnumerable<Claim> claims, string jti, DateTime loginTime, DateTime expiresAt)
private void RegisterSession(IEnumerable<Claim> claims, string jti, DateTime loginTime, DateTime expiresAt, string? loginIp)
{
string? userName = claims.FirstOrDefault(c => c.Type == JwtClaimTypes.UserName)?.Value;
if (string.IsNullOrWhiteSpace(userName))
@@ -105,6 +105,7 @@ public class TokenService : ITokenService
UserName = userName,
NickName = claims.FirstOrDefault(c => c.Type == JwtClaimTypes.NickName)?.Value ?? string.Empty,
Jti = jti,
LoginIp = loginIp ?? string.Empty,
LoginTime = loginTime,
ExpiresAt = expiresAt,
});
@@ -126,4 +127,3 @@ public class TokenService : ITokenService
return result;
}
}