Проверка таблицы «белого списка» во время атрибута [Authorize] (ASP.Net MVC5 Web API JWT)

Я следил за этой статьей, чтобы получить JWT, выпущенные из .Net Web API. http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/

TL; DR

Как я могу добавить дополнительную логику к атрибуту Authorize для проверки таблицы базы данных на соответствие определенному требованию в JWT, возможно, в JwtBearerAuthenticationOptions?

Более длинная версия ...

Он отлично работает для создания JWT, а также для его проверки при запуске запроса к контроллеру, включая заголовок авторизации ...

По сути, в статье не идет речь об отзыве ...

После долгих поисков в Google я вижу, что есть несколько способов обработки отзыва с помощью JWT.

Я выбрал маршрут «Белый список» и создал таблицу для хранения UserId, ClientId (Audience) и столбца, содержащего значение JTI (GUID).

По сути, я хочу добавить дополнительную логику к атрибуту [Authorize], чтобы также проверить эту таблицу на соответствие JTI для данного User и ClientId ...

Возможно ли это без необходимости писать собственный атрибут JWTAuthorize, поскольку я бы очень хотел использовать значение по умолчанию ...

Я подозреваю, что это нужно указать в JwtBearerAuthenticationOptions?

Ваше здоровье!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
458
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне удалось заставить это работать с помощью специального провайдера на JwtBearerAuthenticationOptions.

Поставщик наследуется от IOAuthBearerAuthenticationProvider, и затем я специально использую метод ValidateIdentity для обработки дополнительной логики.

    public Task ApplyChallenge(OAuthChallengeContext context)
    {
        return Task.FromResult<object>(null);
    }

    public Task RequestToken(OAuthRequestTokenContext context)
    {
        return Task.FromResult<object>(null);
    }

    public Task ValidateIdentity(OAuthValidateIdentityContext context)
    {
        string userId = // user id from Token...
        Guid tokenId = // jti from Token...
        string appId = // aud/client id from Token...

        //do the DB check here...
        if (CheckUserToken(userId, tokenId, appId))
        {
            return Task.FromResult<object>(null);
        }
        else
        {
            context.SetError("unauthorized_access", "The supplied security identity for this user is not valid.");
            return Task.FromResult<object>(null);
        }
    }

Затем я обрабатываю ошибку на стороне клиента, чтобы решить, куда перенаправить пользователя и т. д.

Если у кого-то есть предложения получше, я бы с удовольствием их увидел :)

Другие вопросы по теме