对接亚马逊 SP-API(Amazon Selling Partner API) 第四章:签名

news/2024/11/1 5:08:03/

1. 前提概要

1.1. 如果打算使用 SDK 的,可跳过这一章

1.2. 本章作了解就可以了。具体 demo 参考下一章【Reports 模块】

1.3. 每个 HTTP 请求都需要将 Authorization 放在 Headers 中

2. Authorization 介绍

官方文档

https://github.com/amzn/selling-partner-api-docs/blob/main/guides/en-US/developer-guide/SellingPartnerApiDeveloperGuide.md#step-4-create-and-sign-your-request

Python 版本完整案例
Examples of the complete Signature Version 4 signing process (Python).

 你有两种方式可以添加 Authorization(具体内容查询官方文档)(仅针对SP-API而言

Authorization header

Query string

3. 拼接 Authorization

下面部分是所有 AWS 的签名方式。

Task 1: Create a canonical request for Signature Version 4

将请求的内容(主机、操作、标头等)组织为标准(规范)格式。规范请求是用于创建待签字符串的输入之一。

demo

CanonicalRequest =
  HTTPRequestMethod + '\n' +
  CanonicalURI + '\n' +
  CanonicalQueryString + '\n' +
  CanonicalHeaders + '\n' +
  SignedHeaders + '\n' +
  HexEncode(Hash(RequestPayload))

Hash 表示生成消息摘要的函数,通常是 SHA-256。(在该过程稍后的阶段中,您将指定要使用的哈希算法。)

HexEncode 表示以小写字母形式返回摘要的 base-16 编码的函数。

Task 2: Create a string to sign for Signature Version 4

使用规范请求和额外信息(例如算法、请求日期、凭证范围和规范请求的摘要(哈希))创建待签字符串。

Credential

DimensionDescriptionExample
DateAn eight-digit string representing the year (YYYY), month (MM), and day (DD) of the request.日期相关格式问题:处理签名版本 4 中的日期20190430
AWS regionThe region you are sending the request to. See Selling Partner API endpoints.us-east-1
ServiceThe service you are requesting. You can find this value in the endpoint. See Selling Partner API endpoints.execute-api
Termination stringA special termination string. For AWS Signature Version 4, the value is aws4_requestaws4_request

 

example

20201022/us-east-1/https://sellingpartnerapi-na.amazon.com/aws4_request

 简而言之,这几个货都是小写的。

Task 3: Calculate the signature for AWS Signature Version 4

使用 AWS 秘密访问密钥作为初始哈希操作的密钥,对请求日期、区域和服务执行一系列加密哈希操作(HMAC 操作),从而派生签名密钥。在派生签名密钥后,通过对待签字符串执行加密哈希操作来计算签名。使用派生的签名密钥作为此操作的哈希密钥。

Signature

官方文档

https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html

各版本的签名代码(Java, C#, Python, Ruby, and JavaScript)
Examples of how to derive a signing key for Signature Version 4.

常见签名异常
https://docs.aws.amazon.com/general/latest/gr/signature-v4-troubleshooting.html

 官方测试 demo


key = 'wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY'
dateStamp = '20120215'
regionName = 'us-east-1'
serviceName = 'iam'

 您的程序将为 getSignatureKey 中的值生成以下值。请注意,这些值是二进制数据的十六进制编码表示形式;密钥本身和中间值应该是二进制格式。


kSecret = '41575334774a616c725855746e46454d492f4b374d44454e472b62507852666943594558414d504c454b4559'
kDate = '969fbb94feb542b71ede6f87fe4d5fa29c789342b0f407474670f0c2489e0a0d'
kRegion = '69daa0209cd9c5ff5c8ced464a696fd4252e981430b10e3d3fd8e2f197d7a70c'
kService = 'f72cfd46f26bc4643f06a11eabb6c0ba18780c19a8da0c31ace671265e3c87fa'
kSigning = 'f4780e2d9f65fa895f9c67b32ce1baf0b0d8a43505a000a1a9e090d414db404d'

 

Task 4: Add the signature to the HTTP request

 

ComponentDescription
The algorithm used for signingThe hash algorithm used throughout the signing process. The Selling Partner API requires SHA-256. You specify this in Step 4. Create and sign your request. AWS4-HMAC-SHA256
CredentialYour AWS access key ID plus the Credential scope. You get your AWS access key ID in Step 2. Create an IAM user. user access key ID + Credential
SignedHeadersA list of all the HTTP headers that you included with the signed request. For an example, see Step 3. Add headers to the URI.
SignatureThe signature calculated in Step 4. Create and sign your request. Signature

example

Authorization: AWS4-HMAC-SHA256 Credential={USER_IAM}/{Credential}, SignedHeaders=host;user-agent;x-amz-access-token;x-amz-date, Signature={Signature}

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIHV6HIXXXXXXX/20201022/us-east-1/https://sellingpartnerapi-na.amazon.com/aws4_request, SignedHeaders=host;user-agent;x-amz-access-token;x-amz-date, Signature=5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924aEXAMPLE

完整 Authorization 代码

Examples: Signature Calculations in AWS Signature Version 4

总结


版权声明:本文为CSDN博主「XERXES SEVEN」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Xerxes_Seven/article/details/116053028


http://www.ppmy.cn/news/919310.html

相关文章

SpringBoot源码解析(二)

SpringBoot的启动过程。我们可以看出一个SpringBoot。入口为SpringApplication.run方法, 第二步,根据RepositoryConfigurationDelegate读取配置文件信息。初始化配置。 第三步,o.s.cloud.context.scope.GenericScope 根据配置文件信息创建b…

HttpWebRequest 上传图片

public string HttpUploadFile(){string url "http://localhost:50380/WebForm1.aspx";string filepath "C:\\Users\\lei2.wang\\Desktop\\Capture.PNG";string fileformname "Capture.PNG";string poststr "";// 这个可以是改变的…

阳历日期转阴历工具类

直接上代码 public class DateUtill {final private static long[] lunarInfo new long[] { 0x04bd8, 0x04ae0,0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0,0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540,0x0d6a0, 0x0ada2, 0x095b0, …

农历插件

<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"> <TITLE>带农历的日历</TITLE> <SCRIPT language"JavaScript"> <!-- var lunarInfonew Array( 0x04bd8,0…

k8s- HPA应用

部署 HPA HPA&#xff08;Horizontal Pod Autoscaling&#xff09;Pod 水平自动伸缩&#xff0c;Kubernetes 有一个 HPA 的资源&#xff0c;HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、 Deployment 或者Replica Set 中的 Pod 数量。 &#xff08;1&#xf…

ANTS 配准 roi配准之个体空间

Given ROIs fixedLabels.nii.gz, to be resampled into the space of movingImage.nii.gz, we would use the same warps: ${ANTSPATH}antsApplyTransforms \-d 3 \-i fixedImage.nii.gz \-r movingImage.nii.gz \
 -t [movingToFixed_0GenericAffine.mat, 1] \
 -t movin…

ANTS医学影像配准+Li‘s 核磁共振影像数据处理

ANTS医学影像配准Li‘s 核磁共振影像数据处理 讲解视频内容请移步Bilibili&#xff1a; https://space.bilibili.com/542601735 入群讨论请加v hochzeitstorte 请注明“核磁共振学习” 公众号&#xff1a;美好事物中转站 ANTS配准 Advanced Normalization Tools If you want a…

go语言公历农历转化

在主函数中调用 package main import ( “fmt” “code.text.com/Work/test/convert” ) func main(){ //农历转公历 //a : convert.ConvertLunarToSolar(1999, 3, 8, false) //fmt.Println(a) //公历转农历 a : convert.ConvertSolarToLunar(1999, 4, 23) // 1998-3-18 fmt…