refactor(auth): 优化JWT令牌创建方法
- 移除CreateJwtToken2方法,统一使用CreateJwtToken方法 - 修改密钥处理方式,从ASCII字符串改为Base64解码 - 删除IssuedAt声明以简化令牌结构 - 更新所有相关调用点使用统一的令牌创建方法
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user