refactor(auth): 优化JWT令牌创建方法
- 移除CreateJwtToken2方法,统一使用CreateJwtToken方法 - 修改密钥处理方式,从ASCII字符串改为Base64解码 - 删除IssuedAt声明以简化令牌结构 - 更新所有相关调用点使用统一的令牌创建方法
This commit is contained in:
@@ -21,7 +21,7 @@ namespace YLErp.BasicTests
|
||||
public void TestGenerateToken()
|
||||
{
|
||||
var identity = UserManager.CreateIdentity("1", "superA", Guid.NewGuid().ToString(""));
|
||||
var jwtToken2 = AuthHelper.CreateJwtToken2(identity);
|
||||
var jwtToken2 = AuthHelper.CreateJwtToken(identity);
|
||||
var jwtTokenHandler = new JwtSecurityTokenHandler();
|
||||
var token = jwtTokenHandler.ReadJwtToken(jwtToken2);
|
||||
Assert.Fail();
|
||||
|
||||
@@ -29,41 +29,10 @@ namespace YLErp.Helpers
|
||||
|
||||
public const string JwtUserToken = "###jwt###";
|
||||
|
||||
/// <summary>
|
||||
/// 创建jwt令牌
|
||||
/// </summary>
|
||||
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));
|
||||
|
||||
// 添加 JTI (JWT ID) 用于黑名单机制
|
||||
var claims = new ClaimsIdentity(identity);
|
||||
if (!claims.HasClaim(c => c.Type == "jti"))
|
||||
{
|
||||
@@ -74,7 +43,6 @@ namespace YLErp.Helpers
|
||||
{
|
||||
Subject = claims,
|
||||
Expires = DateTime.UtcNow.AddSeconds(ExpireInSeconds),
|
||||
IssuedAt = DateTime.Now,
|
||||
Issuer = JwtIssuer,
|
||||
Audience = JwtAudience,
|
||||
SigningCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha512)
|
||||
|
||||
@@ -264,7 +264,7 @@ namespace YLErp.Web.Controllers
|
||||
Response.Cookies.Delete("Access-Token");
|
||||
Response.Cookies.Delete("Access-Token-Encrypt");
|
||||
|
||||
var jwtToken = AuthHelper.CreateJwtToken2(identity);
|
||||
var jwtToken = AuthHelper.CreateJwtToken(identity);
|
||||
Response.Cookies.Append("Access-Token", jwtToken, new CookieOptions
|
||||
{
|
||||
MaxAge = TimeSpan.FromSeconds(AuthHelper.ExpireInSeconds)
|
||||
|
||||
@@ -134,7 +134,7 @@ namespace YLErp.Web.Middleware
|
||||
var identity = UserManager.CreateIdentity(userId, userName, userToken);
|
||||
|
||||
// 生成新的token
|
||||
var newToken = AuthHelper.CreateJwtToken2(identity);
|
||||
var newToken = AuthHelper.CreateJwtToken(identity);
|
||||
|
||||
// 更新cookie
|
||||
context.Response.Cookies.Append("Access-Token", newToken, new CookieOptions
|
||||
|
||||
Reference in New Issue
Block a user