Я играл с AWS Cognito, используя javascript SDK (используя примеры GitHub от Amazon) в угловом приложении для внешнего интерфейса и приложении .Net Core для внутреннего.Что мне интересно, так это то, что я не могу понять, что все важные сведения о токенах доступа общедоступны.Например, идентификатор пула пользователей, IdentityPoolId и ClientId являются просто переменными в javascript и поэтому доступны для всех.Имея эти переменные, легко получить JWK, поскольку это общедоступная веб-страница amazon, основанная на идентификаторе клиента и пуле пользователей.Разве эти ключи не должны быть частными?И если эти ключи общедоступны, разве нельзя имитировать страницу входа и украсть информацию для входа?
Я пытался искать такие вещи, как защита вашего ключа и JWK, но когда я это делаю, я получаю результаты только накак подписать и расшифровать access_tokens.
Секрет клиента
Поскольку ответ ниже предлагает использовать секрет клиента, я рассмотрел это.Секрет клиента не используется при использовании javascript cognito sdk.В документации они говорят вам не генерировать секретный ключ, потому что он не будет работать с javascript sdk.Это потому, что это не добавляет никакой дополнительной безопасности, так как приложение работает на стороне клиента и, таким образом, вся эта информация общедоступна.До сих пор неясно, насколько безопасны все эти клиентские / жетоны, поскольку все можно найти в Интернете.
Мое решение
Если кто-либо из 1 заинтересован в моем решении, вот оно:в основном я упустил использование JWT и JWKS, так как JWK можно использовать только для проверки подписи JWT.Невозможно использовать JWK для подписи токенов, в случае с Amazon подпись JWT выполняется с помощью сертификата где-то внутри idp cognito.Поэтому доступ к JWK не является проблемой безопасности.Имитация страницы входа и использование моих идентификаторов Cognito по-прежнему будет возможно, но есть и другие способы повысить безопасность.