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

如何用AWS Amplify JS SDK让Cognito未授权用户调用API Gateway?

未授权用户通过AWS Amplify调用API Gateway的方法

核心逻辑

未授权用户调用启用AWS Cognito身份池访问的API Gateway时,不需要JWT令牌,而是通过SigV4签名完成身份验证。Amplify的API模块会自动处理未授权用户的凭证获取与签名生成,无需手动构造请求头。


步骤1:确认前置配置

  1. 确保API Gateway目标端点使用AWS_IAM授权类型,而非Cognito用户池授权。
  2. 给身份池的未授权角色添加API调用权限,示例IAM策略:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:你的区域:你的账号ID:API网关ID/*/*/*"
    }
  ]
}
  1. 项目中已正确配置Amplify(包含Auth和API的aws-exports信息)。

步骤2:使用Amplify API模块发起请求

直接调用Amplify封装的API.get/API.post等方法,它会自动区分授权/未授权用户,处理对应的身份验证逻辑:

import { API } from 'aws-amplify';

// 未授权用户调用公共端点示例
const fetchPublicContent = async () => {
  try {
    const response = await API.get('你的API名称', '/公共端点路径', {
      // 可选:添加查询参数
      queryStringParameters: { category: 'public' }
    });
    console.log('请求结果:', response);
  } catch (err) {
    console.error('请求失败:', err);
  }
};

手动处理请求(不推荐)

如果必须手动构造请求,需使用AWS SDK的SignatureV4生成SigV4签名头,步骤如下:

  1. 获取未授权用户的临时凭证:
import { Auth } from 'aws-amplify';

const credentials = await Auth.currentCredentials();
const { accessKeyId, secretAccessKey, sessionToken } = credentials;
  1. 使用@aws-sdk/signature-v4生成签名请求头,需包含Authorization、X-Amz-Date、X-Amz-Security-Token等字段,再通过fetch或axios发起请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:17:12