2009年05月09日

「Subject: Amazon アソシエイト Web サービスの名称変更および署名認証についてのお知らせ」のツール側対応作業

表題SubjectのメールがAmazonからきてるんだけど(いくつかのサービスで利用してるので)、名称変更はどうでもいいとして、8月15日以降はリクエストアクセスの電子署名を付けないといけなくなるようだ。一般ユーザにはほぼ関係のないことではあるが、Amazonにアクセスして何かサービスに転換する(たとえばブログ記事に貼り込ませる機能を提供する)のが必要な人にはいろいろ頭が痛いことになりそう。 ガイドはあるものの、とても……面倒です。署名には、開発鍵を作ったときに一緒に作成された秘密鍵を使うことになる。開発鍵だけを受け取って運用してたようなサービスでは対応が大変そうだなぁ。以下RESTful版のガイドを適当に訳。

ItemLookupするのに「http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=00000000000000000000&Operation=ItemLookup&ItemId=0679722769&ResponseGroup=ItemAttributes,Offers,Images,Reviews&Version=2009-01-06」としてるとする。

  1. アクセス時間を示すタイムスタンプ属性をまず追加(とりあえずGMTで「2009-01-01T12:00:00Z」)。「http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=00000000000000000000&Operation=ItemLookup&ItemId=0679722769&ResponseGroup=ItemAttributes,Offers,Images,Reviews&Version=2009-01-06&Timestamp=2009-01-01T12:00:00Z」
  2. リクエストのコンマやコロンをURLエンコード(%〜)化。「http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=00000000000000000000&Operation=ItemLookup&ItemId=0679722769&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Version=2009-01-06&Timestamp=2009-01-01T12%3A00%3A00Z」
  3. &で区切られているパラメータ=値 のペアに内部的に分割(&は取る)。
    Service=AWSECommerceService
    AWSAccessKeyId=00000000000000000000
    Operation=ItemLookup
    ItemId=0679722769
    ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews
    Version=2009-01-06
    Timestamp=2009-01-01T12%3A00%3A00Z
  4. パラメータを辞書順に並べ変える。
    AWSAccessKeyId=00000000000000000000
    ItemId=0679722769
    Operation=ItemLookup
    ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews
    Service=AWSECommerceService
    Timestamp=2009-01-01T12%3A00%3A00Z
    Version=2009-01-06
  5. &でつなげ直す。これで署名可能な文字列になった。「AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06」
  6. 次のような文字列(改行付き)を作成する。
    "GET
    webservices.amazon.com
    onca/xml
    AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06"
  7. RFC2104のHMAC-SHA256アルゴリズムと秘密鍵で、上記の文字列の署名ハッシュを作成する。「pwqYQRc3RepIrf7m+VMRy/jFXx/ZBSPsaSFFexIUoSI=」(秘密鍵が1234567890だった場合)
  8. +、=、/などをURLエンコードする。「pwqYQRc3RepIrf7m%2BVMRy%2FjFXx%2FZBSPsaSFFexIUoSI%3D」
  9. 上記のエンコード済み署名をリクエストにSignatureパラメータで付加する。「http://webservices.amazon.com/onca/xml?AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06&Signature=pwqYQRc3RepIrf7m%2BVMRy%2FjFXx%2FZBSPsaSFFexIUoSI%3D」

blosxom Kitのawsxsomを直すのだるいな…。あと社内でも独自のサービス作ってるんだが、これも直さないといけないようだ(こっちはRubyだしわりと楽めではあるが)。

コメント

お初にお目にかかります。
今回、Amazon アソシエイト・プログラムの名称変更に伴い、署名認証の必要性が出てきたということで、お伺いしたいことがあります(いきなり申し訳ありません・・・!)

自分は、Amazon アソシエイト・プログラムを利用する際、「G-Tools」や「amazlet」などのツールを利用しています。
こういったツールで生成されたタグを、全て変更しなければならなくなるのでしょうか?

>一般ユーザにはほぼ関係のないことではあるが
自分は間違いなく一般ユーザに分類され、Timestamp?なども一切分かりません。
ですので、非常に困っている次第なのですが・・・・・・

今回の変更は、ツール開発者様以外の、「ツール利用者」にも影響があることなのか、お教えいただけると有り難いです。

よろしくお願いします。

Posted by 篠 at 2009/05/24 (Sun) 12:05:40

Amazonの本サービス変更は、Amazonと直接やり取りするツールに影響するものです。G-Toolsやamazletの場合は、ユーザーG-Tools・amazletAmazonとなっているようなので、篠さんのようなサービス受理側ユーザーが本件を意識する必要はありません。もちろん、G-Tools/amazletのサービス提供者が今回の変更に8月までに対応しなければそのサービスは使えなくなるでしょうが、おそらくすでに対処済みか、対応予定になっているとは思います(心配なら提供者に聞いてみるとよいでしょう)。

Posted by kmuto at 2009/05/24 (Sun) 12:40:47

ご返答の程、ありがとうございます。

非常に不安でしたが、分かりやすいお答えを頂き、だいぶ安心しました!
専門用語ばかりで、理解しようとしてもそれが出来ないままだったので、とても助かります。どうもありがとうございます。

コメントを二重投稿してしまったようなので、削除の方、よろしくお願いいたします。申し訳ありません。

Posted by 篠 at 2009/05/24 (Sun) 13:08:02
トラックバック
http://kmuto.jp/d/index.cgi/computer/amazon-advertising-api.trackback
コメントを書く

メッセージ: Ready to post a comment.