Подтвердить что ты не робот

Проверять маркер доступа на каждый запрос с помощью Redis

В настоящее время я внедряю OAuth 2.0 Architecture для моего RESTful API.

С каждым запросом я установил токен-указатель авторизации в заголовке HTTP для всех моих клиентов для авторизации запросов.

Authorization: Bearer sdflksd3r4823vkn95-03850432 

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

Итак, я подумывал пойти в Db, чтобы проверить каждый HTTP-запрос. Я чувствую, что это не будет масштабироваться красиво по причинам производительности.

Итак, мне было интересно, подходит ли такое решение, как Redis для очень быстрых однократных чтения статуса токена доступа?

4b9b3361

Ответ 1

Точка наличия HMAC для токена заключается в том, что сервер может быстро проверить его, не вызывая внешнего хранилища данных (например, Redis, MySQL и т.д.). Это дает дополнительное преимущество для масштабирования на нескольких серверах, поскольку нет общего состояния (вся информация для проверки токена - это сам токен и ключ для HMAC).

Если у вас будет черный список отозванных токенов, то что-то вроде Redis, вероятно, будет в порядке (хотя все же медленнее, чем не делать удаленный вызов для каждой проверки токена). Устанавливайте правильно, с низкой задержкой между экземпляром Redis и сервером API, вы должны увидеть < 10ms за запрос.

Бонус: Еще одна возможность ускорить еще больше - использовать фильтр Bloom для обработки кэширования отклоненных запросов API. Таким образом, вы переходите только к Redis, если фильтр Bloom помещает маркер запроса как возможно отмененный. Обратите внимание: поскольку это еще один уровень кэширования, вам нужно будет обновить состояние фильтра Bloom, когда токен будет отклонен.

Ответ 2

Я реализовал нечто подобное для обработки отмененного токена, сгенерированного JWT.

Я использую redis для установки отмененных токенов с истечением срока действия, поэтому токены автоматически удаляются из redis. И у меня есть промежуточное программное обеспечение, чтобы проверить redis на предоставленный токен. Проверьте полный пост здесь. Надеюсь, что это поможет.

Ответ 3

Я делаю что-то похожее для себя.
Для синтаксиса и шифрования токена я предлагаю вам использовать JWT, это хороший стандарт для этого.
Это нормально, используя redis для хранения пары токенов /userid, также потому, что мы можем установить значение expire.
Также я вставил фильтр цветения посередине, но я сделал это наоборот, чем предложение sehrope: я храню все токены при входе в систему с помощью фильтра цветения, поэтому, если токен отсутствует, он определенно недействителен; иначе, вероятно, правильно, но я должен сделать чек на Redis, чтобы быть уверенным; но теперь у меня есть проблема: если я хочу расширить свою систему auth, мне нужен балансировщик балансировки нагрузки между серверами auth. IMHO, используя фильтр цветка для создания черного списка, неверен: если я черный список в цвету фильтрует отложенные и неправильные токены, если элемент не занесен в черный список, фильтр цветка возвращает false (и я должен проверить его в redis backend to авт); else, если элемент присутствует (в черный список), я должен проверить его на redis, чтобы быть уверенным, потому что ответ фильтра фильтра цветка может быть ложным положительным.