1. ホーム
  2. php

[解決済み] CognitoIdentityProviderClient::adminCreateUser() で MissingAuthenticationTokenException ("Missing Authentication Token") が発生する。

2022-02-14 22:18:04

質問

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 /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
  • awss/aws-sdk-php 3.92.3

.aws/credentials

[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' => '[email protected]'],
    ],
    'UserPoolId' => 'ap-southeast-2_XXXX',
    'Username' => '[email protected]',
]);

解決方法は?

を削除する必要があります。 'credentials' => false から CognitoIdentityProviderClient の構成になります。

は、その adminCreateUser() のような操作とは異なり)署名されたリクエストが必要です。 signUp() というのは signUp() は符号なしリクエストで動作しますが adminCreateUser() といった開発者認証が必要な操作はできません)。

AWS Docsより

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を渡すと、null認証情報を使用し、リクエストに署名しません。

開発者クレデンシャルを提供するために、リクエストに署名が必要です。