Вопрос:
Как "правильно" валидировать SecurityStamp в JWT.
Сделал так:
Каждый раз при обращении к API сверяю SecurityStamp c тем, который предварительно сохранен в redis
, если он там отсутствует или не совпадает-> иду в SQL
бд и сравниваю уже c тем который сохранен там.
Использовал Redis
, чтобы хоть как-то "ускорить" этот процесс.
private async Task ValidatesecurityStamp(TokenValidatedContext context, IIdentityUserRedisStore redisStore, UserManager<IdentityUser> userStore)
{
var securityStampClaim =
context.Ticket.Principal.Claims.FirstOrDefault(
claim => claim.Type == "AspNet.Identity.SecurityStamp");
var subjectClaim =
context.Ticket.Principal.Claims.FirstOrDefault(
claim => claim.Type == OpenIdConnectConstants.Claims.Subject);
if (securityStampClaim == null || subjectClaim == null)
{
return;
}
/* Проверим SecurityStamp в Redis */
var secStamp = await redisStore.GetHash(subjectClaim.Value, TokenName.UserSecurityStamp);
if (secStamp == new Guid(securityStampClaim.Value))
{
return;
}
var user = await userStore.FindByIdAsync(subjectClaim.Value);
if (user?.SecurityStamp == new Guid(securityStampClaim.Value))
{
await redisStore.SetHash(user.Id.ToString(), TokenName.UserSecurityStamp, user.SecurityStamp.ToString());
return;
}
context.SecurityToken = null;
context.Ticket = null;
context.SkipToNextMiddleware();
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Я сделал небольшой проект, который собираюсь использовать как ORM при разработке приложений для Windows CE 50
Разрабатываю windows-сервисОн должен при помощи SqlDependency отслеживать изменения в базе MSSql (добавление данных) и отправлять появившиеся данные...
В первом случае (закомментированом) все нормально работает, но когда пытаюсь присвоить переменной onReady функцию через сеттер, то в setTimeout пишет...
Функция считает сколько раз нужно умножить цифры числа друг на друга чтобы получить одну цифруВсё работает, но возвращаемая переменная в console