refactor(auth): 优化JWT令牌创建方法

- 移除CreateJwtToken2方法,统一使用CreateJwtToken方法
- 修改密钥处理方式,从ASCII字符串改为Base64解码
- 删除IssuedAt声明以简化令牌结构
- 更新所有相关调用点使用统一的令牌创建方法
This commit is contained in:
hjhan
2026-04-27 15:34:12 +08:00
parent 8745b76cac
commit 7cd937518f
4 changed files with 3 additions and 35 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ namespace YLErp.BasicTests
public void TestGenerateToken() public void TestGenerateToken()
{ {
var identity = UserManager.CreateIdentity("1", "superA", Guid.NewGuid().ToString("")); var identity = UserManager.CreateIdentity("1", "superA", Guid.NewGuid().ToString(""));
var jwtToken2 = AuthHelper.CreateJwtToken2(identity); var jwtToken2 = AuthHelper.CreateJwtToken(identity);
var jwtTokenHandler = new JwtSecurityTokenHandler(); var jwtTokenHandler = new JwtSecurityTokenHandler();
var token = jwtTokenHandler.ReadJwtToken(jwtToken2); var token = jwtTokenHandler.ReadJwtToken(jwtToken2);
Assert.Fail(); Assert.Fail();
-32
View File
@@ -29,41 +29,10 @@ namespace YLErp.Helpers
public const string JwtUserToken = "###jwt###"; public const string JwtUserToken = "###jwt###";
/// <summary>
/// 创建jwt令牌
/// </summary>
public static string CreateJwtToken(ClaimsIdentity identity) public static string CreateJwtToken(ClaimsIdentity identity)
{
var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(JwtSecretKey));
// 添加 JTI (JWT ID) 用于黑名单机制
var claims = new ClaimsIdentity(identity);
if (!claims.HasClaim(c => c.Type == "jti"))
{
claims.AddClaim(new Claim("jti", Guid.NewGuid().ToString("N")));
}
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = claims,
Expires = DateTime.UtcNow.AddSeconds(ExpireInSeconds),
Issuer = JwtIssuer,
Audience = JwtAudience,
SigningCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature)
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
public static string CreateJwtToken2(ClaimsIdentity identity)
{ {
var key = new SymmetricSecurityKey(Convert.FromBase64String(JwtSecretKey)); var key = new SymmetricSecurityKey(Convert.FromBase64String(JwtSecretKey));
// 添加 JTI (JWT ID) 用于黑名单机制
var claims = new ClaimsIdentity(identity); var claims = new ClaimsIdentity(identity);
if (!claims.HasClaim(c => c.Type == "jti")) if (!claims.HasClaim(c => c.Type == "jti"))
{ {
@@ -74,7 +43,6 @@ namespace YLErp.Helpers
{ {
Subject = claims, Subject = claims,
Expires = DateTime.UtcNow.AddSeconds(ExpireInSeconds), Expires = DateTime.UtcNow.AddSeconds(ExpireInSeconds),
IssuedAt = DateTime.Now,
Issuer = JwtIssuer, Issuer = JwtIssuer,
Audience = JwtAudience, Audience = JwtAudience,
SigningCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha512) SigningCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha512)
+1 -1
View File
@@ -264,7 +264,7 @@ namespace YLErp.Web.Controllers
Response.Cookies.Delete("Access-Token"); Response.Cookies.Delete("Access-Token");
Response.Cookies.Delete("Access-Token-Encrypt"); Response.Cookies.Delete("Access-Token-Encrypt");
var jwtToken = AuthHelper.CreateJwtToken2(identity); var jwtToken = AuthHelper.CreateJwtToken(identity);
Response.Cookies.Append("Access-Token", jwtToken, new CookieOptions Response.Cookies.Append("Access-Token", jwtToken, new CookieOptions
{ {
MaxAge = TimeSpan.FromSeconds(AuthHelper.ExpireInSeconds) MaxAge = TimeSpan.FromSeconds(AuthHelper.ExpireInSeconds)
@@ -134,7 +134,7 @@ namespace YLErp.Web.Middleware
var identity = UserManager.CreateIdentity(userId, userName, userToken); var identity = UserManager.CreateIdentity(userId, userName, userToken);
// 生成新的token // 生成新的token
var newToken = AuthHelper.CreateJwtToken2(identity); var newToken = AuthHelper.CreateJwtToken(identity);
// 更新cookie // 更新cookie
context.Response.Cookies.Append("Access-Token", newToken, new CookieOptions context.Response.Cookies.Append("Access-Token", newToken, new CookieOptions