如何用AWS Amplify JS SDK让Cognito未授权用户调用API Gateway?
未授权用户通过AWS Amplify调用API Gateway的方法
核心逻辑
未授权用户调用启用AWS Cognito身份池访问的API Gateway时,不需要JWT令牌,而是通过SigV4签名完成身份验证。Amplify的API模块会自动处理未授权用户的凭证获取与签名生成,无需手动构造请求头。
步骤1:确认前置配置
- 确保API Gateway目标端点使用AWS_IAM授权类型,而非Cognito用户池授权。
- 给身份池的未授权角色添加API调用权限,示例IAM策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:你的区域:你的账号ID:API网关ID/*/*/*" } ] }
- 项目中已正确配置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签名头,步骤如下:
- 获取未授权用户的临时凭证:
import { Auth } from 'aws-amplify'; const credentials = await Auth.currentCredentials(); const { accessKeyId, secretAccessKey, sessionToken } = credentials;
- 使用
@aws-sdk/signature-v4生成签名请求头,需包含Authorization、X-Amz-Date、X-Amz-Security-Token等字段,再通过fetch或axios发起请求。
内容的提问来源于stack exchange,提问作者Alexander Ershov
相关产品推荐
相关产品推荐

