Я использую JWT для аутентификации пользователей моего приложения.Когда пользователь входит в систему, ему предоставляется токен доступа и токен обновления.Чтобы сохранить токен обновления в безопасности, я не храню его на клиентской стороне, но сохраняю его на серверной стороне со своей учетной записью, чтобы к нему было нелегко получить доступ.Я запутался в безопасности маркеров обновления, но вот логику, которую я понимаю, когда читаю онлайн-ресурсы о том, как использовать токены обновления:
- аутентификация
- доступ к хранилищутокен + обновить токен где-то (в моем случае, токен доступа на внешнем интерфейсе и токен обновления на внутреннем конце)
- при выполнении запроса API, проверить токен доступа на стороне API
- если срок действия маркера истек, используйте токен обновления, чтобы сгенерировать новый токен доступа + новый токен обновления, отправить токен доступа обратно клиенту
- сохранить токены, как раньше ... и повторить
Вопрос безопасности, который меня беспокоит, заключается в том, что кто-то еще (хакер) захватил токен доступа и отправил с ним запрос в API, если срок действия токена истек, API будет использовать токен обновления дляполучить новый токен доступа + новый токен обновления и вернуть по крайней мере токен доступа хакеру.
Я прочитал эту статью примерно 5-6 раз, и я прочитал эту статью несколько раз, а также некоторые другие статьи на эту тему, все они что-то говорятв соответствии с
убедитесь, что токен обновления надежно хранится, потому что он долговечен, access_token недолговечен, так что не так уж и важно,
Но согласнопоток, который я описал выше, не имеет значения, является ли токен доступа недолговечным, токен обновления будет использоваться для получения нового токена доступа и постоянного доступа.
Есть ли что-то, чего мне не хватает?Как API узнает, кто отправляет запрос, если хакер завладел токеном с истекшим сроком доступа?он все равно отправит новый, используя токен обновления.Я должен как-то проверить, кто отправляет запрос?
ОБНОВЛЕНИЕ
Так что я понимаю, что когда запрашивается новый токен доступа, мне нужно отправить поверх токена обновления,идентификатор клиента и секрет клиента.Проблема, с которой я столкнулся, заключается в том, что, как и раньше, хакер может отправить запрос на мой API-сервер, сервер получает от хакера захваченный токен доступа, он увидит, что срок его действия истек, поэтому он отправит токен обновления вместе сclientID / client secret (которые хранятся в виде переменных среды) для API авторизации и возвращают новый токен доступа / токен обновления, что возвращает нас к той же проблеме.
ОБНОВЛЕНИЕ 2
некоторые интересные вопросы по теме:
- Почему у OAuth v2 есть и токены доступа и обновления?
- https://security.stackexchange.com/questions/87119/how-secure-are-expiring-tokens-and-refresh-tokens
в соответствии со вторым вопросом и ответом, похоже, что токен обновления не является более безопасным способом поддержания доступа, просто легче обнаружитьхакер, потому что токены аутентификации / обновления продолжают получать и аннулировать токены других.Проблема в том, что это произойдет, только если 2 пользователя одновременно пытаются получить доступ к ресурсам - если только хакер окажется активным в данный период времени, он будет иметь неограниченный доступ к данным оригинальных пользователей, пока исходный пользователь не попытается использоватьприложение и доступ к защищенным ресурсам