首页 > 解决方案 > 在 python 中构建 AWS S4 身份验证

问题描述

我正在尝试使用 python 代码片段创建此处概述的 S4 签名。该文档使我感到困惑,因此我希望对以下内容有所了解

1) getSignatureKey 方法对 4 个输入进行签名,但他们显示的输出有一个额外的 kSecret。这个 kSecret 是什么?

2)当我运行程序时,我得到的输出是这样的:

kDate = '\x96\x9f\xbb\x94\xfe\xb5B\xb7\x1e\xdeo\x87\xfeM_\xa2\x9cx\x93B\xb0\xf4\x07GFp\xf0\xc2H\x9e\n\r'

而根据文档的输出是这样的:

kDate    = '969fbb94feb542b71ede6f87fe4d5fa29c789342b0f407474670f0c2489e0a0d'

使用哪种正确格式?如何从另一个中得到一个?

3) 输出值似乎也不同(如果我去掉 \x)。这是文档错误吗?

我正在使用 python 2.7

标签: python-2.7amazon-web-serviceshmac

解决方案


kSecret是原始 aws-access-key-secret 的十六进制编码表示。其他一些语言示例为此提供了一个中间变量。

为各种键显示的输出仅为了方便起见:

请注意,这些是二进制数据的十六进制编码表示;密钥本身和中间值应该是二进制格式。

我不精通python 2,但它看起来像是binascii.hexlify一种完成转换的方法。请记住,这种转换只是为了您的眼球。实际代码使用中间键的二进制表示。


推荐阅读