问题描述
我仔细阅读了的使用指南,以进行设置以调用新的SP-API(https://github.com/amzn/selling-partner-api-docs/blob/main/guides/developer-guide/SellingPartnerApiDeveloperGuide.md),并在此过程中检查了所有api区域以授予访问权限(例如,订单,库存等) 。我正在使用Amazon(https://github.com/amzn/selling-partner-api-models/tree/main/clients/sellingpartner-api-aa-csharp)提供的C#库。我成功获取了访问令牌并成功签署了请求,但始终收到以下错误:对请求资源的访问被拒绝。 /未经授权,没有详细信息。我正在尝试对 / orders / v0 / orders 端点进行简单的获取。有什么想法我做错了吗?任何帮助将不胜感激!
下面是我的代码:
private const string MARKETPLACE_ID = "ATVPDKIKX0DER";
var resource = $"/orders/v0/orders";
var client = new RestClient("https://sellingpartnerapi-na.amazon.com");
IRestRequest restRequest = new RestRequest(resource,Method.GET);
restRequest.AddParameter("MarketPlaceIds",MARKETPLACE_ID,ParameterType.QueryString);
restRequest.AddParameter("CreatedAfter",DateTime.UtcNow.AddDays(-5),ParameterType.QueryString);
var lwaAuthorizationCredentials = new LWAAuthorizationCredentials
{
ClientId = AMAZON_LWA_CLIENT_ID,ClientSecret = AMAZON_LWA_CLIENT_SECRET,RefreshToken = AMAZON_LWA_REFRESH_TOKEN,Endpoint = new Uri("https://api.amazon.com/auth/o2/token")
};
restRequest = new LWAAuthorizationSigner(lwaAuthorizationCredentials).Sign(restRequest);
var awsAuthenticationCredentials = new AWSAuthenticationCredentials
{
AccessKeyId = AMAZON_ACCESS_KEY_ID,SecretKey = AMAZON_ACCESS_SECRET,Region = "us-east-1"
};
restRequest = new AWSsigv4Signer(awsAuthenticationCredentials).Sign(restRequest,client.BaseUrl.Host);
var response = client.Execute(restRequest);
解决方法
如果您的 sp 应用正在审核中,您也会收到此错误,让我发疯!
,在我们的情况下,我们必须向我们定义为进行API调用的用户显式添加IAM策略。请查看下面的链接,并确认您调用API的用户已为其分配了策略:
不知何故,我们两次进行了逐步设置,而错过了添加此显式策略的步骤。最初,我认为是按照说明将其添加为“内联”,但这似乎行不通。
,如果您遵循SP-API指南,则创建了一个角色(这是您的应用程序向其注册的IAM ARN)和一个用户,该用户有权承担该角色进行API调用。
但是,指南尚不清楚的一件事是您不能直接使用该用户的凭据进行API调用。您必须首先使用用户的凭据(AMAZON_ACCESS_KEY_ID / AMAZON_ACCESS_SECRET)调用STS API的AssumeRole method,然后它将返回根据角色授权的临时凭据。在签署请求时使用那些临时凭据。
[][][4][][],[][][][][],[][][][][]
还将返回会话令牌,您必须在API调用中将其包含在名为AssumeRole
的标头中。有关X-Amz-Security-Token
的简要说明,请参见https://docs.aws.amazon.com/STS/latest/APIReference/CommonParameters.html
我不认为是重复问题,购买解决方案可能适用:https://stackoverflow.com/a/66860192/1034622