ruby - 我们计算的请求签名与您提供的签名不匹配 | Aws::Sigv4::Signer | 红宝石
问题描述
我收到此错误
我们计算的请求签名与您提供的签名不匹配此请求的规范字符串应该是 String-to-Sign 应该是
我正在尝试在 Rails 中实现 SP API。我从https://api.amazon.com/auth/o2/token端点获取了访问令牌。之后病房使用 Aws::STS::Client 创建了临时会话令牌。我使用 Aws::Sigv4::Signer 进行签名。
第一步(访问令牌)
payload = {
grant_type: 'refresh_token',
client_id: [ClientId],
refresh_token: [RefreshToken],
client_secret: [ClientSecret],
}
headers = {'Content-Type': 'application/json'}
response = HTTParty.post("https://api.amazon.com/auth/o2/token", body: payload.to_json, headers: headers)
access_token = response["access_token"]
第二步(使用 AWS::STS 创建代入角色)
result = sts = Aws::STS::Client.new(
region: "us-east-1",
credentials: Aws::Credentials.new("aws-access-key", "aws-secret-key")
).assume_role({
role_arn: "role_arn",
role_session_name: 'sp-api'
})
enter code here
第三步(创建签名)
signer = Aws::Sigv4::Signer.new(
service: 'execute-api',
region: 'us-east-1',
# static credentials
access_key_id: access_key_id,
secret_access_key: secret_access_key,
session_token: session_token
)
signature = signer.sign_request(
http_method: 'GET',
url: 'https://sellingpartnerapi-na.amazon.com/orders/v0/orders/ordersID',
headers: {
'host' => 'sellingpartnerapi-na.amazon.com',
'X-Amz-Access-Token' => access_token,
})
最后一步(使用签名标头调用 API)
headers = {
'Content-Type' => 'application/json',
"host" => signature.headers["host"],
"X-Amz-Date" => signature.headers['x-amz-date'],
"X-Amz-Security-Token" => signature.headers["x-amz-security-token"],
"X-Amz-Content-Sha256" => signature.headers["x-amz-content-sha256"],
"Authorization" => signature.headers['authorization']
}
data = HTTParty.send(:get, "https://sellingpartnerapi-na.amazon.com/orders/v0/orders/ordersID", headers: headers)
解决方案
推荐阅读
- rethinkdb - 如何获取嵌套数组字段
- java - 如何在 WSO2 4.9.0 中设置自定义用户代理
- python-3.x - 如何从python中的pandas数据框中的列中提取关键字(字符串)
- service-worker - 渐进式 Web 应用程序 Service Worker 能否找出它在哪个设备上运行(智能手机、平板电脑……)?
- java - 从 Activity B Android 调用 Activity A 方法
- php - 从 PHP 中的 dateTime 获取日期
- google-chrome - 为什么我无法将 .babylon 文件导入到 babylon JS?
- python - 试图将二进制字符串转换为十进制,计算不正确,我不明白为什么
- python - 从 CSV 文件中读取大数字时,pandas 将其推断为字符串
- javascript - 如何配置 jQuery 事件在触发之前不传播