Хранение aws cognito JWT-ключа в javascript-интерфейсе небезопасно?

Я просматривал файлы javascript на сайте, чтобы найти нужную конечную точку, во время которой я нашел такую ​​строку.

DASHBOARD_API_Token=eyJraWQiOiJVS2paTnB3SWdBK292QzB3RWdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Когда я декодировал Above JWT, я нашел такие объекты, как kid, username, useremail, iss = http://cognito-idp.us-east-1.amazonaws.com/ {pool-id}

Я прочитал несколько ресурсов Amazon, которые говорят, что можно получить учетные данные aws, используя вышеуказанный токен. Учитывая, что у меня есть только токен jwt, что возможно, и нужно ли мне обращаться на веб-сайт, чтобы отозвать текущий токен?

1 ответ

Ну, AWS Cognito - довольно интересный зверь, когда дело доходит до его токенов JWT и того, что вы можете с ними делать.

Во-первых, когда вы аутентифицируете пользователя по Cognito User Pool, вы получаете 3 разных токена: AccessToken, IdToken, а также RefreshToken, И то и другое AccessToken а также IdToken действительны ровно 1 час (и вы не можете их изменить). Вот почему вы получаете RefreshToken, который вы можете использовать, чтобы получить новую пару AccessToken а также IdToken вызывая, например, InitiateAuth. RefreshToken по умолчанию действует в течение 30 дней, но вы можете изменить его в настройках вашего пула пользователей Cognito.

маркер доступа

Это самый мощный токен, который дает Cognito. Если у вас есть действительный AccessTokenВы можете вызвать несколько довольно чувствительных API Cognito.

Одним из очень удивительных примеров является то, что вы можете вызвать API DeleteUser, предоставив AccessToken и он полностью удалит вашу учетную запись из Cognito User Pool. Самое приятное здесь то, что разработчик приложения не может помешать вам сделать это, если у вас есть действительный AccessToken, Разработчики AWS говорят, что "это по замыслу". Это была одна из самых веских причин, по которой мы решили не передавать Cognito Access Token на интерфейс приложения.

Говоря о полезной нагрузке AccessTokenединственным потенциально чувствительным требованием является client_id, который содержит идентификатор клиента Cognito, который использовался для аутентификации пользователя. Если у этого клиента нет клиентского секрета (который, вероятно, в первую очередь следует считать недостатком безопасности), то client_id может использоваться для вызова довольно широкого спектра API Cognito. Тем не менее, Cognito считает, client_id быть публичной информацией. Все остальные претензии считаются публичными, полный список претензий вы можете посмотреть здесь.

IdToken

Содержит информацию об игроке. Он может содержать некоторую личную информацию об игроке в зависимости от того, какие стандартные утверждения и пользовательские атрибуты были настроены в вашем пуле пользователей Cognito, однако также можно подавить или переопределить эти утверждения с помощью лямбда-триггера Pre Token Generation. Использование этого триггера позволяет скрывать или маскировать атрибуты игрока, которые считаются чувствительными и не должны появляться в IdToken,

Насколько я знаю, вы не можете использовать IdToken вызывать Cognito API.

RefreshToken

Может использоваться только для запроса нового AccessToken а также IdToken, не может использоваться для вызова API Cognito. В нашем конкретном случае использования мы должны были избегать прохождения RefreshToken к интерфейсу приложения, так как его можно использовать для получения AccessToken против общедоступного Cognito API (это означает, что мы не можем помешать пользователю сделать это).

Использование токенов Cognito для получения учетных данных AWS

Это возможно только в том случае, если Cognito User Pool был явно интегрирован с Cognito Identity Pool (что предполагает, что разработчики приложений знали, что они делают). При обмене токенами Cognito JWT вы получаете временные учетные данные AWS с разрешениями, привязанными к определенной роли IAM, настроенной в Cognito Identity Pool. Это абсолютно законный поток и предполагаемое поведение. Более того, если Cognito Identity Pool настроен для разрешения неаутентифицированного доступа, вы даже можете получить временные учетные данные AWS без использования токенов Cognito JWT (но они будут связаны с другой, предположительно, более строгой ролью IAM).

Использование токенов Cognito с API Gateway

Ресурсы AWS API Gateway можно интегрировать с пользовательскими пулами Cognito. В зависимости от того, как выполняется интеграция, вы можете использовать AccessToken или же IdToken из интегрированного пула пользователей Cognito.

Отзыв токенов

Вы можете отозвать все токены, выпущенные для вашей учетной записи в Cognito User Pool, позвонив в GlobalSignOut API и предоставив действительный AccessToken, Поскольку этот API является общедоступным, вам не нужно связываться с сайтом, если у вас есть действующий AccessToken,

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