Аутентификация пула пользователей Cognito на PHP

#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. ДА. Идентификатор клиента — это простой в отзыве ресурс. Если в какой-то момент вы считаете, что он был скомпрометирован, вы можете отозвать этот конкретный клиент и начать использовать новый клиент для своего приложения. Идентификатора пула пользователей и идентификатора пула идентификаторов недостаточно для выполнения каких-либо значимых действий.