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

如何用PHP Admin SDK无需密码认证Cognito用户获取Token完成数据导入

Cognito PHP环境无密码认证解决方案

作为Cognito所有者,完全可以在不获取用户明文密码的前提下完成用户身份认证,适配数据迁移场景,以下是两种可行实现方案:

方案1:自定义认证流模拟用户登录(需获取用户Cognito令牌)

如果你需要拿到对应用户的Cognito令牌(IdToken/AccessToken)与其他AWS服务通信,可以使用Cognito的CUSTOM_AUTH无密码认证流实现:

  1. 前置配置
    • 在Cognito用户池对应的应用客户端设置中,开启ENABLE_CUSTOM_AUTH选项
    • 配置「定义认证挑战」Lambda触发器,逻辑直接返回认证通过,无需设置密码校验等挑战环节
    • 为操作使用的IAM身份授予cognito-idp:AdminInitiateAuth接口调用权限
  2. PHP代码示例
require 'vendor/autoload.php';

use Aws\CognitoIdentityProvider\CognitoIdentityProviderClient;

// 初始化Cognito客户端
$cognitoClient = new CognitoIdentityProviderClient([
    'region' => '替换为你的AWS区域代码,例:us-east-1',
    'version' => '2016-04-18',
    'credentials' => [
        'key' => '替换为你的IAM访问密钥AK',
        'secret' => '替换为你的IAM秘密密钥SK',
    ]
]);

// 调用管理员认证接口,无需传递密码
$authResult = $cognitoClient->adminInitiateAuth([
    'UserPoolId' => '替换为你的Cognito用户池ID',
    'ClientId' => '替换为你的Cognito应用客户端ID',
    'AuthFlow' => 'CUSTOM_AUTH',
    'AuthParameters' => [
        'USERNAME' => '替换为目标用户的用户名/邮箱等登录标识',
    ]
]);

// 提取认证返回的令牌,可用于调用其他服务
$idToken = $authResult->get('AuthenticationResult')['IdToken'];
$accessToken = $authResult->get('AuthenticationResult')['AccessToken'];

方案2:直接用高权限IAM凭证执行迁移(无需用户令牌)

如果你的迁移场景不需要强制校验用户端的Cognito令牌,建议选择该方案,实现成本更低:
直接使用具备Cognito、目标迁移服务操作权限的IAM凭证执行数据写入操作,写入过程中只要在数据字段中正确关联对应用户的Cognito用户ID即可,完全不需要走用户认证流程。

安全建议

  • 迁移使用的IAM身份只授予任务所需的最小权限,不要使用根账号凭证,迁移完成后及时回收权限
  • 如果使用方案1的自定义认证流,迁移完成后及时关闭应用客户端的ENABLE_CUSTOM_AUTH选项,移除对应的Lambda触发器配置,避免影响正常登录的安全性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:06:01