Безопасно ли предоставлять API refreshtoken

0

Вопрос

У меня есть приложение, разработанное с использованием React в интерфейсе и ASP.Net Веб-API в бэкэнде. Я использую JWT для авторизации. Процесс заключается в

  1. Когда пользователь входит в систему и проходит проверку подлинности, на интерфейс отправляются 2 токена: токен доступа и токен обновления. Токен доступа-это JWT, а токен обновления-это случайная строка, и токен обновления хранится в базе данных.
  2. Для каждого последующего вызова маркера доступа API, прикрепленного в заголовке, у меня есть фильтр аутентификации, который проверяет маркер доступа.
  3. Как только срок действия маркера доступа истечет, появится состояние 401 с сообщением об ошибке TokenExpired.
  4. Как только интерфейс получит 401, он вызовет API токена обновления, чтобы получить токен обновления

Вопрос, который у меня есть, заключается в том, что у меня не может быть фильтра аутентификации для проверки маркера доступа API токенов обновления, так как он выдаст 401 из-за маркера доступа с истекшим сроком действия, поэтому мне нужно сделать API маркера обновления анонимным, чтобы он не попадал в фильтр аутентификации. Если я делаю анонимно, я звоню в базу данных, чтобы получить маркер обновления, сохраненный для пользователя, и сравнить его с тем, который я получил от внешнего интерфейса. Итак, безопасно ли сделать API токенов обновления анонимным, если нет, то каков наилучший способ?

asp.net-web-api c# jwt
2021-11-24 05:13:45
2
0

В Auth0 создан набор функций, которые снижают риски, связанные с использованием токенов обновления, путем введения гарантий и контроля за их жизненным циклом. Наша платформа идентификации предлагает ротацию токенов обновления, которая также включает автоматическое обнаружение повторного использования.

Пожалуйста, прочтите следующую тему.

Обновление Ротации Токенов

Автоматическое Обнаружение Повторного использования Маркера Обновления

2021-11-24 05:56:21

Мы выполняем своего рода ротацию токенов обновления. Когда запрашивается новый токен доступа, мы проверяем его с помощью токена обновления и предоставляем новый токен доступа и новый токен обновления, и токен обновления обновляется в базе данных. Однако я не думаю, что мы можем сохранить список всех токенов обновления, сгенерированных до сих пор, как указано в разделе автоматическое обнаружение повторного использования
Raghul Raman
0

JWT подписывается с использованием предварительно определенного секретного ключа. Поскольку это REST API в бэкэнде и без состояния, jwt используется для авторизации и построения основного объекта

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

Использование "предварительного секрета" указывает, что JWT является вариантом JWT только для HMAC, т. Е. Шифрования нет, поскольку это указывает на пару закрытых и открытых ключей, а не на "предварительный секрет". Таким образом, JWT, по сути, является подписью для описания характеристик безопасности, мы обеспечиваем целостность, чтобы требования JWT были четко сформулированы и не были изменены с момента подписания. Это также означает, что для подписи на одном конце используется тот же секрет, что и для проверки на другом конце, должен использоваться тот же секрет, поскольку для проверки подписи требуется, чтобы оба конца генерировали подпись и обе подписи совпадали. Таким образом, никакие данные не шифруются, поэтому данные в JWT не являются конфиденциальными и нуждаются в защите.

Учитывая этот контекст, как токен обновления, так и токен доступа являются простым JWT, который может быть сгенерирован только владельцем секрета - если они раскрыты, их можно использовать для выполнения вредоносных запросов, пока они остаются действительными (nbf претензия).

По сути, этот тип JWT может быть использован неправильно, если он будет выдан за личность, которую представляет секрет, подписанный JWT, без фактического знания самого секрета, пока nbf утверждение истекает срок действия токена - и токен обновления является механизмом для продления nbf заявите, не имея секрета (что приведет к новой подписи, потому что nbf утверждение изменится при использовании).

Существует одна защита от повторного использования маркера доступа, это утверждение nonce. Если вы в настоящее время не используете утверждение nonce, вы можете прочитать о том, как реализован OIDC, и сделать то же самое в своем приложении. Но, как вы сказали, ваше приложение не имеет состояния, но, надеюсь, у бэкенда есть форма состояния, которая гарантирует отсутствие повторного использования и предотвращает повторное использование подписи JWT. Для каждого разового изменения подписи JWT, следовательно, маркер доступа изменяется и может использоваться только 1 раз. Так что в случае кражи это условие гонки, кто первым использует токен, что значительно минимизирует риск, но не является идеальным решением.

2021-11-24 09:11:17

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................