VBAでAmazon Pruduct Advertising API 署名認証2009-06-19 20:06

Amazon アソシエイト Web サービスが「Product Advertising API」という名前に変わりました。

今回は名前が変わっただけでなく、「リクエストに認証のための電子署名を含める」ことが必要に。

そのために必要な技術要素は:

・ISO8601形式でのGMTでのタイムスタンプ作成
・パラメーターのバイト順での並べ替え
・SHA-256ハッシュ値生成
・HMACでのメッセージ認証コード生成
・BASE64エンコード
・URLエンコード(パーセントエスケープ)

これらをひとつひとつ実装して組み合わせればいいわけですが、
Visual Basicだと、これがまあ、いちいち面倒くさい・・・。
PHPとかならたぶん何の苦労もないんでしょうけどね。

でもやるしかない。


最も面倒なのがSHA-256。
これは結局、Phil Fresle さんのクラスモジュールを流用させてもらいました。

コチラ↓
http://www.frez.co.uk/freecode.htm#sha256
(SHA-256 Digest - VB and VBScript (ASP) versions)

ただし、そのままでは7bit ASCII以外のデータを処理できないため、
ほんの少し改造する必要がありました。
(ここでかなりはまった・・・)


次はHMAC。

HMACとは:
http://www.ipa.go.jp/security/rfc/RFC2104JA.html

なんだか難しげに書いてありますが、手続きとしてはカンタンなことで、
要は、秘密鍵の文字列と定数とをXORをかけたのをメッセージに
くっつけつつ、ハッシュ(今回はSHA-256)を二重にかけてやるだけ。


あとは、BASE64やら、URLエンコードやら、ソーティングやら、
面倒くさいけれども単純なことだけです。
ビール的飲料をあおりながら一気に書き上げました。

あ、ソーティングとかはちょっと人のコードを拝借しましたが :-p


こうして、VBAで生成した電子署名付きリクエストが無事に
これまでどおり通るようになりましたとさ。

めでたしめでたし。


アマゾンの電子署名認証へのVisual Basicでの対応でお困りの方へ♪
Excel VBAのサンプルコードを有償でご提供します。
連絡可能なeメールアドレスを添えてコメント欄でご連絡ください。

(追記)
既存のVBAコードへのアマゾン署名認証対応作業も承ります♪

(追記 2009年08月23日)
提供サンプルコードはAccessでも使えます♪