C# .Net5标识注销

C# .Net5标识注销,c#,.net,jwt,asp.net-identity,C#,.net,Jwt,Asp.net Identity,如何注销使用.Net 5标识系统登录的用户 当我调用Logout时,jwt令牌保持有效,我可以成功调用授权请求 await _signInManager.SignOutAsync(); 这里是我的用户控制器: [ApiController] [Route("api/[controller]/[action]")] [Authorize(AuthenticationSchemes = Microsoft.AspNetCore.Authentication.JwtBearer

如何注销使用.Net 5标识系统登录的用户

当我调用Logout时,jwt令牌保持有效,我可以成功调用授权请求

 await _signInManager.SignOutAsync();
这里是我的用户控制器:

[ApiController]
[Route("api/[controller]/[action]")]
[Authorize(AuthenticationSchemes = Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme)]
public class UserController : ControllerBase
{
    private readonly UserManager<IdentityUser> _userManager;
    private readonly RoleManager<IdentityRole> _roleManager;
    private readonly SignInManager<IdentityUser> _signInManager;
    private readonly IConfiguration _configuration;
    private readonly IHttpContextAccessor _httpContextAccessor;
    private readonly ILogger<UserController> _logger;
    
    public UserController(IConfiguration configuration, SignInManager<IdentityUser> signInManager,
        UserManager<IdentityUser> userManager, RoleManager<IdentityRole> roleManager,
        IHttpContextAccessor httpContextAccessor, ILogger<UserController> logger)
    {
        _configuration = configuration;
        _logger = logger;
        _signInManager = signInManager;
        _userManager = userManager;
        _roleManager = roleManager;
        _httpContextAccessor = httpContextAccessor;
    }

    public async Task<IActionResult> Logout() { 
        await _signInManager.SignOutAsync();
        return Ok("Logged out.");
    } 
}
[ApiController]
[路由(“api/[controller]/[action]”)
[授权(AuthenticationSchemes=Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme)]
公共类UserController:ControllerBase
{
私有只读用户管理器_UserManager;
专用只读角色管理器(RoleManager);
专用只读签名管理器\u签名管理器;
专用只读IConfiguration\u配置;
专用只读IHttpContextAccessor\u httpContextAccessor;
专用只读ILogger\u记录器;
公共用户控制器(IConfiguration配置、SignInManager、SignInManager、,
用户管理器用户管理器,角色管理器角色管理器,
IHttpContextAccessor httpContextAccessor,ILogger记录器)
{
_配置=配置;
_记录器=记录器;
_signInManager=signInManager;
_userManager=userManager;
_roleManager=roleManager;
_httpContextAccessor=httpContextAccessor;
}
公共异步任务注销(){
等待_signInManager.SignOutAsync();
返回Ok(“注销”);
} 
}
我使用的是5.0.100 sdk版本


谢谢

一般来说,不可能撤销JWT承载令牌,这就是为什么它们有过期时间的原因。其思想是,用户代理在时间到期后返回并刷新令牌,此时它将知道会话是否已结束

JWT令牌的属性之一是可以“脱机”验证,即不访问发布后端。所需要的只是用于签名的密钥的公共部分。一旦颁发了令牌,它在令牌内设置的持续时间内有效,并且没有(规范的)方法使其过期

当然,您总是可以自由地在后端构建撤销列表或类似内容,但这并不是JWT令牌的真正用途

缓解问题的一个简单方法是设置一个较短的过期时间