- 从JWT Token中解密出用户的标识符(如用户名)。
- 在服务端中存储该用户的 JWT Token 列表和过期时间,用于之后的 token 验证和清理。
- 在客户端使用 JWT Token 时,记录下此 JWT Token。
- 在用户想要注销时,将存储在客户端的 JWT Token 发送到服务端。
- 服务端将该 JWT Token 标记为无效状态(例如,将其存储在已失效的 token 列表中)。
- 客户端删除存储在其中的 JWT Token。
- 如果 JWT Token 的过期时间在注销之后,仍旧有效,服务端也会在过期时间到达后自动从已失效的 token 列表中移除该 Token。
以下是 ASP .NET Core 实现 JWT 注销的代码示例:
public class TokenManager
{
private static Dictionary _tokens = new Dictionary();
public static void AddToken(string token, DateTime expiration)
{
_tokens[token] = expiration;
}
public static void RemoveToken(string token)
{
_tokens.Remove(token);
}
public static bool IsTokenValid(string token)
{
if (!_tokens.ContainsKey(token))
{
return false;
}
var now = DateTime.UtcNow;
var expiration = _tokens[token];
if (now > expiration)
{
_tokens.Remove(token);
return false;
}
return true;
}
}
[HttpPost]
public IActionResult Logout()
{
var token = Request.Headers["Authorization"].ToString().Replace("Bearer ", "");
if (!string.IsNullOrEmpty(token))
{
TokenManager.RemoveToken(token);
}
return Ok();
}