私は、ブラウザ内、フォームベースのS3へのポストのための署名のベース64エンコーディングで読むことがほとんどすべてを読んだと思う:古いドキュメントと新しいドキュメント。例えば:S3用のPython生成シグネチャ
http://doc.s3.amazonaws.com/proposals/post.html
とにもこれを見つけた:
、私はドラフトしようとしているむしろ上記またはAmazonの新しいポリシー生成、または後のBotoの周りいじるを使用するよりもhttp://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html
より簡単な.pyスクリプトで、ポリシーJSONをプレーンテキストファイル(policy.txt)から取得し、HTMLフォームを作成するのに役立つbase-64エンコードされた署名を生成します。
(エンコードされたポリシーに依存している)署名自体は正しくエンコードされていません...おそらくutf-8とasciiの違いや\ n(改行)の問題がありますか?
下記のスクリプトは以下のとおりです。ポリシーとAWS秘密鍵private_key
は、このスクリプトが動作するかどうかを確認するために使用しているAWSテストケースからのものです。 Amazonで引用されているように正しくエンコードされた署名は、参照用に以下のスクリプトに含まれています。
以下の計算として署名がつまりアマゾン?:
によって提供される基準署名と一致しない理由を誰も私に伝えることができます:
をこれが正しくエンコードされている理由:
policy_encoded = base64.b64encode(policy)
これはNOTです:
signature = base64.b64encode(hmac.new(private_key, policy_encoded, sha).digest())
パイソン署名c alculator ...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import base64, hmac, sha
from sys import argv
script, policy = argv
private_key = 'uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o'
input = open("..Desktop/policy.txt", "rb")
policy = input.read()
policy_encoded = base64.b64encode(policy)
signature = base64.b64encode(hmac.new(private_key, policy_encoded, sha).digest())
print "Your policy base-64 encoded is %s." % (policy_encoded)
print "Your signature base-64 encoded is %s." % (signature)
print "Your signature encoded should be 2qCp0odXe7A9IYyUVqn0w2adtCA="
JSONポリシー(policy.txt - UTF-8)
{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"bucket": "johnsmith"},
["starts-with", "$key", "user/eric/"],
{"acl": "public-read"},
{"success_action_redirect": "http://johnsmith.s3.amazonaws.com/successful_upload.html"},
["starts-with", "$Content-Type", "image/"],
{"x-amz-meta-uuid": "14365123651274"},
["starts-with", "$x-amz-meta-tag", ""]
]
}
Rik:ughごめんなさい!見たこともありませんでした! JSONブロックをインデントで受け入れるためにSOエディタを取得するのは苦労していましたが、これを解決するために何を重視すべきか教えてください... – Sean
'Ctrl + K'を使用してくださいコードブロックをインデントするために、自動的に4つのスペースを追加し、編集したものを見てください([x min ago](http://stackoverflow.com/posts/9018767/revisions)をクリックして前のリビジョンを参照してください)。メインコードはまだフォーマットが悪いですし、あまりにも多くの単語があります。私はあなたの質問がちょっと "恐ろしい"ように見えますが、集中した質問はもっと解決しそうです*(良い質問を書くのは簡単ではない)* –
申し訳ありませんDulyは指摘していますが、編集内容に戻ってくると思いますが、私はそれを締めてあまり詳しく説明しません。 – Sean