2

Amazon Product Advertising API を使用して、Powershell で ISBN / ANSI 番号を送信し、本のメタデータを返す Web リクエストを作成したいと考えています。(タイトル、著者、...)

これまでのところ、AssociateTag、AWSAccessKeyId、および AWS シークレット キーを取得するためのアカウントを作成しました。この情報を使用して、テスト ページで署名付きの WebRequest を作成できます。これは完璧に機能します。http://associates-amazon.s3.amazonaws.com/scratchpad/index.html

今私の質問は、この WebRequest を Powershell で作成し、Sec Key で「署名する文字列」に署名する方法ですか?

ドキュメントhttp://docs.amazonwebservices.com/AWSECommerceService/latest/DG/rest-signature.htmlは、WebRequest に追加される HMAC-SHA256 ハッシュ キーを生成する必要があることを示しています。しかし、私はそのようなハッシュを作成できませんでした...

**
$AwsSecKey = "1234567890"

$string = "GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&ItemId=0679722769&Operation=I
temLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReview
s&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&
Version=2009-01-06"

$hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha.key = [Text.Encoding]::ASCII.GetBytes($key)
$signature = $hmacsha.ComputeHash([Text.Encoding]::ASCII.GetBytes($string))
$sig = [string]::join("", ($signature | % {([int]$_).toString('x2')}))
**

誰かがこれで私を助けてくれることを願っています...

ありがとう、アンドレアス

4

3 に答える 3

3

latkinのコメントに加えて、改行文字を使用して文字列を作成する必要があります。そうしないと、署名がAmazonの署名と一致しなくなります。これは、 AmazonProductScatchpadで署名を照合するために取得した例です。

$amazonserver="webservices.amazon.com"
$linebreak="`n"
$AWSAccessKey = "2345678"
$AssociateTag = "1234567" 
$secretkey = "1234567890"
$url = "/onca/xml"
$ItemID = "0679722769"
$timestamp = "2012-10-19T15%3A34%3A33.000Z"

$urlparams = "AWSAccessKeyId=" + $AWSAccessKey + "&AssociateTag=" + $AssociateTag + "&Condition=All&IdType=ASIN&ItemId=" + $ItemID + "&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers&Service=AWSECommerceService&Timestamp=" + $timestamp + "&Version=2011-08-01"
#write-host "Urlparams=$urlparams"
$stringtosign="GET" + $linebreak + $amazonserver + $linebreak + $url + $linebreak + $urlparams
#write-host "stringtosign=$stringtosign"
#Results from Amazon Products Scratchpad, http://associates-amazon.s3.amazonaws.com/scratchpad/index.html
$test="GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=2345678&AssociateTag=1234567&Condition=All&IdType=ASIN&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers&Service=AWSECommerceService&Timestamp=2012-10-19T15%3A34%3A33.000Z&Version=2011-08-01"
#Write-Host $test
$testsig ="9oGX%2Fs8K5ww6CLkAGYLPCiLPAp5kdEBYyBwzOF7fXZI%3D"

$hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha.key = [Text.Encoding]::ASCII.GetBytes($secretkey)
$signature = $hmacsha.ComputeHash([Text.Encoding]::ASCII.GetBytes($stringtosign))
#$sig = [string]::join("", ($signature | % {([int]$_).toString('x2')}))
#$sig
$sig = [Convert]::ToBase64String($signature)
$sig
Add-Type -AssemblyName System.Web
$encoded = [System.Web.HttpUtility]::UrlEncode($sig)
$encoded
$testsig -match $encoded
于 2012-10-19T18:12:31.413 に答える
1

AWS サイトのProduct Advertising API Signed Request Sample Code - C# REST/Query codeを見たことがありますか?

SignedRequestHelperこれには、PowerShell で直接使用できるC# クラスが含まれているか、AWS リクエスト署名のギャップを埋めるのに役立つ可能性があります。

幸運を!

ザック

于 2012-08-23T18:34:42.163 に答える
0

Zach が指しているライブラリは、おそらく最善の策です。しかし、あなたは正しい軌道に乗っています。あなたが間違っている唯一の部分は、最終的なハッシュ文字列を作成するために必要なことだと思います

$sig = [Convert]::ToBase64String($signature)
于 2012-08-23T18:39:49.447 に答える