在亚马逊销售合作伙伴API之后,我得到了LWA access token。但是,我在向REST提出请求时遇到了阻塞。
我尝试使用aws-sdk-signer创建一个签名的请求
access_token = 'LWA access token'
signer = Aws::Sigv4::Signer.new(
access_key_id: 'my access id',
region: 'us-east-1',
secret_access_key: 'my access key,
service: 'execute-api',
)
signature = signer.sign_request(
http_method: 'GET',
url: 'https://sellingpartnerapi-na.amazon.com/orders/v0/orders',
headers: {
'host' => 'sellingpartnerapi-na.amazon.com',
'user_agent' => 'test (Language=Ruby)',
'x-amz-access-token' => access_token
})
response = HTTParty.send(:get, 'https://sellingpartnerapi-na.amazon.com/orders/v0/orders', headers: {
'host' => signature.headers['host'],
'user_agent' => 'test (Language=Ruby)',
'x-amz-access-token' => access_token,
'x-amz-content-sha256' => signature.headers['x-amz-content-sha256'],
'x-amz-date' => signature.headers['x-amz-date'],
'Authorization' => signature.headers['authorization'],
})雷伯斯
{"errors"=>[{"message"=>"Access to requested resource is denied.", "code"=>"Unauthorized", "details"=>"Access token is missing in the request header."}]}看起来我没有正确地签署LWA访问令牌,但是我不知道发生了什么,因为这是一个新的API,并且没有太多的实现,特别是在ruby中。
有人能给我指路吗?
更新:我跟踪了Singer文档https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/Sigv4/Signer.html
发布于 2021-09-03 15:16:56
对于任何无意中发现这一点的人:
您的问题可能源于HTTParty (或其他HTTP )在幕后使用Ruby的Net::HTTPHeader。
Net::HTTPHeader在发送请求之前将所有请求标头大写,并且x-amz-access-token标头区分大小写。
如果使用有效值填充x-amz-access-token,但仍收到以下错误:
{
"message": "Access to requested resource is denied.",
"code": "Unauthorized",
"details": "Access token is missing in the request header."
}...then,您可能会遇到这个问题。
您可以通过重载Net:HTTPHeader.capitalize来绕过这个问题,如下所示:
module Net::HTTPHeader
def capitalize(name)
name
end
private :capitalize
end另见:https://github.com/amzn/selling-partner-api-docs/issues/292#issuecomment-759904882
发布于 2021-05-26 13:38:15
“请求头中缺少访问令牌”听起来好像您的x访问令牌有问题。你是这样取回的吗?client.rb#L40
https://stackoverflow.com/questions/65669679
复制相似问题