From e606587c0c618e3fa0daecca91a4fb62b23139d2 Mon Sep 17 00:00:00 2001 From: hjhan Date: Tue, 24 Mar 2026 14:59:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(auth):=20=E6=B7=BB=E5=8A=A0=20JWT=20?= =?UTF-8?q?=E9=BB=91=E5=90=8D=E5=8D=95=E6=9C=BA=E5=88=B6=E6=94=AF=E6=8C=81?= =?UTF-8?q?=20-=20=E5=9C=A8=20AuthHelper=20=E4=B8=AD=E6=B7=BB=E5=8A=A0=20J?= =?UTF-8?q?TI=20(JWT=20ID)=20=E7=94=9F=E6=88=90=E9=80=BB=E8=BE=91=20-=20?= =?UTF-8?q?=E4=B8=BA=E6=AF=8F=E4=B8=AA=20JWT=20=E4=BB=A4=E7=89=8C=E5=88=86?= =?UTF-8?q?=E9=85=8D=E5=94=AF=E4=B8=80=E6=A0=87=E8=AF=86=E7=AC=A6=20-=20?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=20JTI=20=E5=A3=B0=E6=98=8E=E7=9A=84=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD=20-=20=E9=9B=86?= =?UTF-8?q?=E6=88=90=E5=88=B0=E7=8E=B0=E6=9C=89=E7=9A=84=E4=BB=A4=E7=89=8C?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=B5=81=E7=A8=8B=E4=B8=AD=20-=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=90=8E=E7=BB=AD=E7=9A=84=E4=BB=A4=E7=89=8C=E9=BB=91?= =?UTF-8?q?=E5=90=8D=E5=8D=95=E7=AE=A1=E7=90=86=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/Helpers/AuthHelper.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/YLErpDAL/Helpers/AuthHelper.cs b/YLErpDAL/Helpers/AuthHelper.cs index 3f88374c..d31b636f 100644 --- a/YLErpDAL/Helpers/AuthHelper.cs +++ b/YLErpDAL/Helpers/AuthHelper.cs @@ -36,9 +36,16 @@ namespace YLErp.Helpers { 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 = new ClaimsIdentity(identity), + Subject = claims, Expires = DateTime.UtcNow.AddSeconds(ExpireInSeconds), Issuer = JwtIssuer, Audience = JwtAudience,