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

ХОРОШО. Вот моя вещь

Мы строим небольшое приложение поверх Lumen / Laravel. Нам нужно, чтобы управление пользователями полностью осуществлялось AWS cognito.

В основном 2 простые функции.

  1. Отправьте данные пользователя в пул пользователей AWS cognito по запросу пользователя.
  2. Аутентифицировать пользователя по пулу cognito с помощью простой электронной почты / мобильного телефона и пароля по запросу на вход в систему.

Нам нужно сделать это с помощью PHP.

Теперь проблема в том, что я не могу найти никаких документов по API PHP с четкой процедурой или примерами. Cognito предоставляет API только для Android, IOS, JS, Unity и Xamarian. Мне нужна похожая документация для PHP.

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

Примечание: я почти потратил больше полутора дней, чтобы понять, можно ли это сделать и как. Поэтому, пожалуйста, не присылайте мне ни одной ссылки, которая появляется первой или второй в вашем поиске Google. Вероятно, я уже видел эту ссылку без удачи.

Любая помощь будет оценена.

8

Решение

К сожалению, нет рабочих примеров для PHP.
В настоящее время Cognito поддерживает SDK высокого уровня для тех, кого вы упомянули, но не поддерживает SDK высокого уровня для PHP. Низкоуровневый SDK можно использовать, вызывая API, упомянутые ниже.

http://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.CognitoIdentityProvider.CognitoIdentityProviderClient.html

Приведенный ниже пример должен работать с небольшим переводом на PHP, как и большая часть кода в этом SDK.
https://github.com/aws/aws-sdk-android/blob/master/aws-android-sdk-cognitoidentityprovider/src/main/java/com/amazonaws/mobileconnectors/cognitoidentityprovider/CognitoUser.java

Вместо вызова InitiateAuth, вы можете вызвать API AdminInitiate auth с параметром ADMIN_NO_SRP_AUTH, чтобы вам не нужно было выполнять вычисления SRP в PHP. SDK высокого уровня обеспечивают обертку для этих вычислений, которая управляет ими для вас, но сделать это самостоятельно довольно сложно.

7

Другие решения

Чтобы иметь возможность использовать любой из запросов API, сначала необходимо правильно настроить учетные данные. Делать это на стороне сервера & за пределами EC2, вам нужно будет предоставить Ключ доступа к AWS & КЛЮЧ ОТ СЕКРЕТНОГО ДОСТУПА AWS, идентификатор клиента приложения, секрет клиента и идентификатор пула пользователей вот так

$args = [
'credentials' => [
'key' => 'AAAAAAAAAA',
'secret' => 'abacaaswfas',
],
'region' => 'eu-central-1',
'version' => 'latest',

'app_client_id' => '3asd123adfs1231sdfs',
'app_client_secret' => '1sdf123sdfs123sdfsfsdf132fd3213',
'user_pool_id' => 'eu-central-1_aaaW2Df3',
]

В противном случае вы увидите все возможные виды ошибок, пока не получите правильные идентификаторы.

Чтобы получить ключ доступа к AWS & КЛЮЧ ОТ СЕКРЕТНОГО ДОСТУПА AWS перейдите на консоль AWS, щелкните свое имя, затем перейдите в учетную запись, затем снова нажмите свое имя и перейдите кМои учетные данные«Тогда, я думаю, вы найдете выход …

Чтобы получить идентификатор клиента приложения, секрет клиента приложения, сначала необходимо создать пул пользователей, а затем перейти к клиенту приложения и создать его. (Вы можете найти идентификатор пула под общие настройки )

Простой запрос на вход

$client = new CognitoIdentityProviderClient($args);
$client->adminInitiateAuth([
'AuthFlow' => 'ADMIN_NO_SRP_AUTH',
'AuthParameters' => [
'USERNAME' => YOUR_USERNAME_HERE,
'PASSWORD' => YOUR_PASS_HERE,
'SECRET_HASH' => , base64_encode(hash_hmac('sha256', YOUR_USERNAME_HERE . APP_CLIENT_ID, APP_CLIENT_SECRET, true))
],
'ClientId' => APP_CLIENT_ID,
'UserPoolId' => USER_POOL_ID,
]);

если вы заставите это работать, вы сможете использовать любое из действий, перечисленных в документации Вот

Замечания: Это работает на Версия API 2016-04-18 & PHP 7.1, Пожалуйста, убедитесь, что вы используете ту же версию или, по крайней мере, в API нет серьезных изменений, прежде чем предположить, что это будет работать для вас.

Заметка 2: Идентификаторы, которые я использовал, абсолютно случайны, но они должны иметь одинаковый формат.

0