You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP SDK调用Cognito getUser接口时遭遇凭证获取错误

AWS Cognito PHP SDK v3调用getUser接口问题解决

问题根源

前端JS SDK调用Cognito的getUser接口时,是直接通过OAuth2的access_token完成身份验证,不需要AWS IAM签名凭证;而PHP SDK v3作为服务端SDK,默认会尝试加载AWS凭证(比如环境变量、实例角色元数据等)来签名请求,但getUser属于Cognito用户池的用户信息接口,不需要AWS签名,这就导致SDK错误地尝试获取凭证,最终触发超时报错。

解决方案

创建CognitoIdentityProvider客户端时,明确禁用凭证获取链,同时指定用户池所在区域,然后直接传入access_token调用接口即可。

代码示例

use Aws\CognitoIdentityProvider\CognitoIdentityProviderClient;
use Aws\Exception\AwsException;

// 初始化客户端,关键配置是禁用凭证加载
$cognitoClient = new CognitoIdentityProviderClient([
    'region' => '你的用户池区域(如ap-southeast-1)',
    'version' => 'latest',
    'credentials' => false, // 禁用自动凭证获取,避免超时
]);

try {
    // 调用getUser接口,传入数据库中取出的access_token
    $userResponse = $cognitoClient->getUser([
        'AccessToken' => '你的access_token',
    ]);

    // 提取用户属性(比如邮箱)
    foreach ($userResponse['UserAttributes'] as $attribute) {
        if ($attribute['Name'] === 'email') {
            $userEmail = $attribute['Value'];
            break;
        }
    }
    echo "用户邮箱:{$userEmail}";
} catch (AwsException $e) {
    echo "调用失败:{$e->getMessage()}";
}

注意事项

  • 确保access_token未过期、未被吊销,且属于目标用户池。
  • 即使PHP部署在AWS服务(如EC2、Lambda)内,只要不需要IAM权限调用该接口,就必须设置credentials => false,阻止SDK自动尝试获取实例元数据。
  • 确认用户池的权限配置:默认情况下,有效access_token对应的用户都能调用getUser接口,若有自定义权限策略需检查是否允许该操作。

内容的提问来源于stack exchange,提问作者aff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:05:58