.Net5标识注销



如何注销使用.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.");
} 
}

我使用的是5.0.100 sdk版本。

谢谢!

通常情况下,不可能撤销JWT承载令牌,这就是为什么它们有到期时间的原因。其想法是,用户代理在时间到期后返回并刷新令牌,此时它将知道会话是否结束。

JWT令牌的特性之一是可以被验证";"离线";,即不访问发布后端。所需要的只是用于对其进行签名的密钥的公共部分。一旦令牌被颁发,它在令牌内设置的持续时间内是有效的,并且没有(规范的(方式使其过期。

当然,您总是可以自由地在后端构建吊销列表或类似的内容,但这实际上不是JWT令牌的用途。

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

相关内容

  • 没有找到相关文章

最新更新