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

在JavaScript SDK v3中实现Cognito开发者认证身份遇403签名错误

解决Cognito临时凭证调用AWS Location Service的403签名错误问题

一、先确认临时凭证的有效性

  • 检查从Cognito获取的临时凭证是否包含完整的三个核心字段:AccessKeyId、SecretAccessKey、SessionToken,避免字段拼写错误(比如把SessionToken误写为SessionKey)。
  • 验证凭证的过期时间,确保发起请求时凭证处于有效期内。

二、正确构造LocationClient实例

在Angular中使用AWS SDK v3时,必须显式传入临时凭证,同时指定与Location Service资源一致的区域。示例代码如下:

import { LocationClient, GetDevicePositionCommand } from "@aws-sdk/client-location";

// 从Cognito获取的临时凭证
const tempCredentials = {
  accessKeyId: '你的临时AccessKey',
  secretAccessKey: '你的临时SecretKey',
  sessionToken: '你的会话Token'
};

// 构造LocationClient,区域必须和你的Tracker资源所在区域完全匹配
const locationClient = new LocationClient({
  region: 'ap-southeast-1', // 替换为你的实际资源区域
  credentials: tempCredentials
});

// 调用GetDevicePositionCommand的示例逻辑
const fetchDevicePosition = async () => {
  try {
    const command = new GetDevicePositionCommand({
      TrackerName: '你的Tracker名称',
      DeviceId: '目标设备ID'
    });
    const response = await locationClient.send(command);
    console.log('设备位置数据:', response);
  } catch (error) {
    console.error('请求错误:', error);
  }
};

fetchDevicePosition();

三、排查签名计算的常见问题

  • 区域不匹配:LocationClient的区域必须与Tracker资源所在区域完全一致,区域错误会直接导致签名校验失败,比如资源在us-west-2,就不能用us-east-1。
  • 请求参数错误:检查TrackerName和DeviceId的拼写、格式是否正确,多余的空格或特殊字符会改变请求的签名计算逻辑,引发不匹配问题。
  • CORS配置影响:虽然报错是签名问题,但如果前端域名未在Location Service的CORS允许列表中,OPTIONS预请求失败可能间接导致后续请求异常。确认CORS规则允许你的前端域名,且包含GET方法(GetDevicePosition属于GET请求)。

四、验证Cognito身份池的权限配置

  • 确保Cognito身份池对应的已认证IAM角色拥有geo:GetDevicePosition权限,且资源范围正确。示例IAM策略:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "geo:GetDevicePosition",
      "Resource": "arn:aws:geo:你的区域:你的账号ID:tracker/你的Tracker名称"
    }
  ]
}
  • 检查开发者认证流程的一致性:服务端生成OpenID Token时使用的身份池ID,必须与客户端配置的身份池ID完全一致,避免Token与身份池不匹配。

五、开启SDK调试日志排查签名细节

如果以上步骤都无法解决问题,可以开启AWS SDK的调试日志,查看签名生成的详细过程:

const locationClient = new LocationClient({
  region: '你的区域',
  credentials: tempCredentials,
  logger: console,
  logLevel: 'debug'
});

查看控制台输出的StringToSign和CanonicalRequest内容,对照AWS签名V4规则,确认这些内容是否符合要求,定位签名计算的异常点。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:10:02