Валидация SecurityStamp в Json web token

219
08 сентября 2017, 19:25

Вопрос:
Как "правильно" валидировать 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();
    }
READ ALSO
C#. Реализация Repository без использования ORM

C#. Реализация Repository без использования ORM

Я сделал небольшой проект, который собираюсь использовать как ORM при разработке приложений для Windows CE 50

277
Как при помощи SqlDependency отслеживать изменения в базе MSSql и отправлять появившиеся данные серверу посредством SignalR

Как при помощи SqlDependency отслеживать изменения в базе MSSql и отправлять появившиеся данные серверу посредством SignalR

Разрабатываю windows-сервисОн должен при помощи SqlDependency отслеживать изменения в базе MSSql (добавление данных) и отправлять появившиеся данные...

250
Почему переменная не является функцией

Почему переменная не является функцией

В первом случае (закомментированом) все нормально работает, но когда пытаюсь присвоить переменной onReady функцию через сеттер, то в setTimeout пишет...

393
return не возвращает нужное значение

return не возвращает нужное значение

Функция считает сколько раз нужно умножить цифры числа друг на друга чтобы получить одну цифруВсё работает, но возвращаемая переменная в console

277