Cyrus Zhou 1 год назад
Родитель
Сommit
9364e7b619

+ 2 - 0
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs

@@ -347,6 +347,8 @@ public class SysAuthService : IDynamicApiController, ITransient
         // 发布系统用户操作事件
         _ = _eventPublisher.PublishAsync(SysUserEventTypeEnum.LoginOut, new { Entity = _sysUserRep.GetById(_userManager.UserId) });
         if (string.IsNullOrWhiteSpace(_userManager.Account)) throw Oops.Oh(ErrorCodeEnum.D1011);
+        var token = _httpContextAccessor.HttpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", "");
+        _sysCacheService.Set($"blacklist:token:{token}", "1");
         _httpContextAccessor.HttpContext.SignoutToSwagger();
     }
 

+ 3 - 1
Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs

@@ -31,7 +31,9 @@ public class JwtHandler : AppAuthorizeHandler
     public override async Task HandleAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext)
     {
         // 若当前账号存在黑名单中则授权失败
-        if (_sysCacheService.ExistKey($"{CacheConst.KeyBlacklist}{context.User.FindFirst(ClaimConst.UserId)?.Value}"))
+        var token = httpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", "");
+        if (_sysCacheService.ExistKey($"{CacheConst.KeyBlacklist}{context.User.FindFirst(ClaimConst.UserId)?.Value}") ||
+            _sysCacheService.ExistKey($"blacklist:token:{token}"))
         {
             context.Fail();
             context.GetCurrentHttpContext().SignoutToSwagger();