Есть Web приложение с использованием JWT токена. Сайт отдает Access и Refresh токены.
Собственно при использовании RefreshToken'а как я понял нам надо убить все старые AccessToken'ы.
Никак не могу понять, как это сделать на Asp.net Core? Ведь мы их не храним как Refresh, они известны только пользователю.
Можно конечно сохранять все токены в некой таблице:
Token | isValid
00000 | false
00001 | true
И в дальнейшем просто проверять статус токена, но какое то это странное как по мне решение, да и как даже это реализовать, ведь мы должны как то отловить заход пользователя через старый токен...
Вы можете преобразовать токен в модель и обратно с помощью библиотеки Jose-jwt.
Token newToken = new Token();
EncodeToken(newToken, users);
public partial class Users
{
public int Id { get; set; }
public string Login { get; set; }
public string Password { get; set; }
}
private static void EncodeToken(Token token, Users users)
{
var secretKey = new byte[]
{
164, 60, 194, 0, 161, 189, 41, 38, 130, 89, 141, 164, 45, 170, 159,
209, 69, 137, 243, 216, 191, 131, 47, 250, 32, 107, 231, 117, 37, 158, 225, 234
};
token.id = users.Id;
token.Key = Jose.JWT.Encode(users, secretKey, Jose.JwsAlgorithm.HS256);
}
private static Users DecodeToken(string token)
{
var secretKey = new byte[]
{
164, 60, 194, 0, 161, 189, 41, 38, 130, 89, 141, 164, 45, 170, 159, 209,
69, 137, 243, 216, 191, 131, 47, 250, 32, 107, 231, 117, 37, 158, 225, 234
};
var users = Jose.JWT.Decode<Users>(token, secretKey);
return users;
}
Вы можете добавить в класс юзера время действия токена и сверять с текущем временем. Ну или сделать уже другие проверки, необходимые вам(например сверять пароль)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости