.Net5 身份注销
.Net5 Identity Logout
如何注销使用 .Net 5 Identity 系统登录的用户?
当我调用注销时,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 令牌的一个属性是可以“离线”验证,即无需访问发行后端。所需要的只是用于签名的密钥的 public 部分。令牌一旦发出,就在令牌内设置的持续时间内有效,并且没有(规范的)方法使它过期。
当然,您始终可以在后端自由构建撤销列表或类似列表,但这实际上并不是 JWT 令牌的用途。
减轻问题的一种简单方法是设置较短的过期时间。
如何注销使用 .Net 5 Identity 系统登录的用户?
当我调用注销时,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 令牌的一个属性是可以“离线”验证,即无需访问发行后端。所需要的只是用于签名的密钥的 public 部分。令牌一旦发出,就在令牌内设置的持续时间内有效,并且没有(规范的)方法使它过期。
当然,您始终可以在后端自由构建撤销列表或类似列表,但这实际上并不是 JWT 令牌的用途。
减轻问题的一种简单方法是设置较短的过期时间。