AWS cognito Веб-токен Json и Веб-ключ Json - PullRequest
0 голосов
/ 11 октября 2018

Я играл с 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 по-прежнему будет возможно, но есть и другие способы повысить безопасность.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Когда вы используете приложение java-script, вы должны использовать секретный ключ клиента, потому что именно это обеспечивает безопасность.

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

0 голосов
/ 11 октября 2018

При создании клиента приложения пула пользователей в AWS Cognito предлагается вариант Создать секрет клиента . Секрет клиента используется для защиты пула пользователей только для авторизованных приложений (тех, которые используют секретный ключ).

секрет клиента является частью стандарта oauth, подробнее о нем вы можете узнать здесь

Он используется вместе с вашим ClientId и poolId

var poolData = {
    UserPoolId : '...', // your user pool id here
    ClientId : '...' // your app client id here
    Secretkey: '...'// your app secret key here
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...