#php #amazon-web-services #amazon-cognito
#php #amazon-web-services #amazon-cognito
Вопрос:
Я разработал приложение для iOS и Android, которое собирает данные из cars, которые отправляются в AWS DynamoDB. Пользователь входит в систему через мобильное приложение, используя пул пользователей Cognito.
Теперь я хочу разработать веб-страницу для представления данных пользователя. Для этого пользователь должен предоставить свои учетные данные на веб-странице (SSL), которые используются для извлечения его информации из базы данных. Приведенный ниже код работает хорошо (html-форма для ввода пользователя / пароля не показана):
<script src="jsbn.js"></script>
<script src="jsbn2.js"></script>
<script src="sjcl.js"></script>
<script src="/path/to/moment.min.js"></script>
<script src="aws-cognito-sdk.min.js"></script>
<script src="amazon-cognito-identity.min.js"></script>
<script src="/path/to/aws-sdk-2.3.5.js"></script>
<script src="aws-sdk.js"></script>
<script src="aws-sdk.min.js"></script>
<script type="text/javascript">
function completeAndRedirect() {
var authenticationData = {
Username : document.getElementById("UserID").value,
Password : document.getElementById("Password").value,
};
var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
var poolData = { UserPoolId : 'us-west-.......',
ClientId : '...................'
};
var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
var userData = {
Username : 'test',
Pool : userPool
};
var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
console.log('userid:' authenticationData.Username);
console.log('pass:' authenticationData.Password);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
console.log('access token ' result.getAccessToken().getJwtToken());
},
onFailure: function(err) {
console.log('test');
alert(err);
},
});
}
</script>
Однако javascript будет выполняться на стороне клиента и включать все необходимые API и секретные ключи.
Я читал, что php предпочтительнее, поскольку все останется на стороне сервера. Однако я не нашел никаких примеров или ссылок, указывающих мне правильное направление.
Пока я озадачен, поскольку не знаю, как двигаться дальше, поскольку не похоже, что Amazon рекомендует использовать php, учитывая все примеры в JavaScript и соответствующие комментарии на их форуме: Аутентификация пула пользователей с использованием Php
Есть какие-либо рекомендации по решению этой проблемы в дополнение к шифрованию JavaScript для обфускации ключей?
Ответ №1:
Используйте пулы пользователей Cognito с помощью службы федеративной идентификации Cognito.
Служба федеративной идентификации Cognito предоставляет вашим клиентам временные учетные данные AWS, которые можно использовать для аутентификации в любом другом сервисе AWS, который вы контролируете через роли пула федеративных удостоверений. Вам не нужно будет встраивать свой доступ к AWS и секретные ключи в приложение JavaScript, и вы сможете безопасно взаимодействовать с сервисами AWS.
Пример кода можно найти здесь .
Комментарии:
1. Итак, в целом, минимальный минимум для аутентификации пользователя и получения доступа к сервису AWS:
2. Итак, вкратце, минимальный минимум, который необходимо внедрить в javascript для аутентификации пользователя и получения доступа к сервисам AWS: идентификатор пула удостоверений, идентификатор пула пользователей и идентификатор клиента. Правильно ли это? Если да, то безопасно ли оставлять их в чистом виде?
3. ДА. Идентификатор клиента — это простой в отзыве ресурс. Если в какой-то момент вы считаете, что он был скомпрометирован, вы можете отозвать этот конкретный клиент и начать использовать новый клиент для своего приложения. Идентификатора пула пользователей и идентификатора пула идентификаторов недостаточно для выполнения каких-либо значимых действий.