MissingAuthenticationTokenException («отсутствует токен аутентификации») из CognitoIdentityProviderClient :: adminCreateUser () - PullRequest
6 голосов
/ 29 апреля 2019

У меня есть рабочая реализация AWS PHP SDK.Операции типа $client->getUser() работают, но $client->adminCreateUser() и другие не работают.

Когда я звоню $client->adminCreateUser([...]), это приводит к:

Error executing "AdminCreateUser" on "https://cognito-idp.ap-southeast-2.amazonaws.com"; AWS HTTP error: Client error: `POST https://cognito-idp.ap-southeast-2.amazonaws.com` resulted in a `400 Bad Request` response:
{"__type":"MissingAuthenticationTokenException","message":"Missing Authentication Token"}
 MissingAuthenticationTokenException (client): Missing Authentication Token - {"__type":"MissingAuthenticationTokenException","message":"Missing Authentication Token"}

Линия 191 in / var / www / project / vendor / aws / aws-sdk-php / src / WrappedHttpHandler.php

Подобные сервисы вызываются из CLI (например, cognito-idp admin-create-user) сточно такие же учетные данные работают.

Что вызывает это?


Пример:

Моя среда:

  • Ubuntu 18.04
  • Apache 2.4.29
  • PHP 7.3
  • aws / aws-sdk-php 3.92.3

.aws / учетные данные

[default]
aws_access_key_id=XXXX
aws_secret_access_key=XXXX

Я использую свои учетные данные разработчика

Пример кода:

$client = new CognitoIdentityProviderClient([
    'version' => 'latest',
    'region' => 'ap-southeast-2',
    'credentials' => false, // Set to false to allow roles provisioned to our EC2 instances
]);

$result = $client->adminCreateUser([
    'DesiredDeliveryMediums' => ['Email'],
    'MessageAction' => 'RESEND',
    'TemporaryPassword' => 'TemporaryPassword1234',
    'UserAttributes' => [
        ['Name' => 'email', 'Value' => 'mailbox@domain.tld'],
    ],
    'UserPoolId' => 'ap-southeast-2_XXXX',
    'Username' => 'mailbox@domain.tld',
]);

1 Ответ

3 голосов
/ 02 мая 2019

Вам необходимо удалить 'credentials' => false из конфигурации CognitoIdentityProviderClient.

Для операции adminCreateUser() требуется подписанный запрос (в отличие от операций, подобных signUp(), поэтому signUp() будет работать сзапрос без знака, но adminCreateUser() и другие операции, требующие учетные данные разработчика, не будут)

Из документов AWS

https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cognito-idp-2016-04-18.html#admincreateuser говорит

AdminCreateUser требует учетные данные разработчика.

https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_configuration.html#credentials говорит

Передать false, чтобы использовать нулевые учетные данные и не подписывать запросы.

Для предоставления учетных данных разработчика необходимо подписать запрос.

...