我尝试使用pre-signed post from heroku从我的iOS应用程序直接上传到S3。 Heroku将以下内容返回给我的swift应用程序:
{'url': u'https://bucketname.s3.amazonaws.com/filename', 'data': {'url': u'https://bucketname.s3.amazonaws.com/', 'fields': {'Content-Type': 'm4a', 'key': u'filename', 'AWSAccessKeyId': u'XXXXXXXXXXXX', 'acl': 'public-read', 'policy': u'wtLepKMeghI3rt1UeikLoQcNTYtMDktMTBUMTc6NDE6MTJaIiwgImNvbmRpdGlvbnMiOiBbeyJhY2wiOiAicHVibGljLXJlYWQifSwgeyJDb250ZW50LVR5cGUiOiAibTRhIn0sIHsiYnVja2V0IjogImZ1eZEaJKYzeDgZwz3lOPtys5B0MigIwImv2OpQm3ylP==', 'signature': u'qr647bMEA9M8LeBVqkJLcvEIO4g='}}}
如您所见,有一个签名:qr647bMEA9M8LeBVqkJLcvEIO4g=
和政策
wtLepKMeghI3rt1UeikLoQcNTYtMDktMTBUMTc6NDE6MTJaIiwgImNvbmRpdGlvbnMiOiBbeyJhY2wiOiAicHVibGljLXJlYWQifSwgeyJDb250ZW50LVR5cGUiOiAibTRhIn0sIHsiYnVja2V0IjogImZ1eZEaJKYzeDgZwz3lOPtys5B0MigIwImv2OpQm3ylP==
在AWS documentation中,他们使用的签名示例(如下所示)的字符数比Heroku返回的签名要多得多
Signature=5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7
heroku提供的签名是否与亚马逊要求签署请求的签名不同?我不想使用从Heroku返回的签名吗?
答案 0 :(得分:1)
5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7
为十六进制,qr647bMEA9M8LeBVqkJLcvEIO4g=
采用base64编码,比十六进制短得多,因为base64
使用64个字符进行编码,而hex
使用16个字符。
AWS期望使用base64编码进行签名。那么Heroku回归你的是正确的。你有什么问题?