🐛fix: #IJX34Q 非Identity的token支持jwt token

This commit is contained in:
yubaolee
2026-07-06 21:14:28 +08:00
parent 94f6f9e831
commit 912e1146d6
5 changed files with 239 additions and 16 deletions

View File

@@ -36,6 +36,7 @@ namespace OpenAuth.App.SSO
/// <summary>
/// 如果是Identity则返回信息为用户账号
/// 如果是本地认证则返回JWT Token字符串
/// </summary>
/// <returns></returns>
private string GetToken()
@@ -54,6 +55,15 @@ namespace OpenAuth.App.SSO
return cookie ?? String.Empty;
}
/// <summary>
/// 从JWT Token中提取会话IDjti用于缓存查找
/// </summary>
private string GetSessionIdFromToken(string token)
{
if (string.IsNullOrEmpty(token)) return null;
return JwtTokenHelper.GetSessionId(token);
}
public bool CheckLogin(string token = "", string otherInfo = "")
{
if (_appConfiguration.Value.IsIdentityAuth)
@@ -73,7 +83,21 @@ namespace OpenAuth.App.SSO
try
{
var result = _cacheContext.Get<UserAuthSession>(token) != null;
// 验证JWT Token签名和有效期
var principal = JwtTokenHelper.ValidateToken(token, _appConfiguration.Value.JwtSecret);
if (principal == null)
{
return false;
}
// 检查会话是否在缓存中(确保未被登出失效)
var sessionId = GetSessionIdFromToken(token);
if (string.IsNullOrEmpty(sessionId))
{
return false;
}
var result = _cacheContext.Get<UserAuthSession>(sessionId) != null;
return result;
}
catch (Exception ex)
@@ -95,17 +119,29 @@ namespace OpenAuth.App.SSO
return _app.GetAuthStrategyContext(GetToken());
}
AuthStrategyContext context = null;
var user = _cacheContext.Get<UserAuthSession>(GetToken());
if (user != null)
var token = GetToken();
// 从JWT Token中直接提取用户账号
var account = JwtTokenHelper.GetAccount(token);
if (!string.IsNullOrEmpty(account))
{
context = _app.GetAuthStrategyContext(user.Account);
// 验证会话是否有效(未被登出)
var sessionId = GetSessionIdFromToken(token);
if (!string.IsNullOrEmpty(sessionId))
{
var session = _cacheContext.Get<UserAuthSession>(sessionId);
if (session != null)
{
context = _app.GetAuthStrategyContext(account);
}
}
}
return context;
}
/// <summary>
/// 获取当前登录的用户名
/// <para>通过URL中的Token参数或Cookie中的Token</para>
/// <para>通过JWT Token中的claims直接提取用户账号</para>
/// </summary>
/// <param name="otherInfo">The account.</param>
/// <returns>System.String.</returns>
@@ -116,10 +152,21 @@ namespace OpenAuth.App.SSO
return _httpContextAccessor.HttpContext.User.Identity.Name;
}
var user = _cacheContext.Get<UserAuthSession>(GetToken());
if (user != null)
var token = GetToken();
// 从JWT Token中提取用户账号
var account = JwtTokenHelper.GetAccount(token);
if (!string.IsNullOrEmpty(account))
{
return user.Account;
// 验证会话是否有效
var sessionId = GetSessionIdFromToken(token);
if (!string.IsNullOrEmpty(sessionId))
{
var session = _cacheContext.Get<UserAuthSession>(sessionId);
if (session != null)
{
return account;
}
}
}
return "";
@@ -173,7 +220,12 @@ namespace OpenAuth.App.SSO
try
{
_cacheContext.Remove(token);
// 从JWT Token中提取会话ID删除缓存
var sessionId = GetSessionIdFromToken(token);
if (!string.IsNullOrEmpty(sessionId))
{
_cacheContext.Remove(sessionId);
}
return true;
}
catch