Amazon Webservices mit OAuth nutzen

Im Beitrag Amazon Webservices mit VBA nutzen (www.access-im-unternehmen.de/634) haben wir die technischen Grundlagen dazu geliefert, wie Sie unter VBA auf die Produktdatenbank von Amazon zugreifen können. Der Beitrag Bücherverwaltung (www.access-im-unternehmen.de/633) lieferte ein praktisches Beispiel für den Einsatz dieser Technik. In der Zwischenzeit hat sich einiges getan: Amazon hat eine zusätzliche Hürde eingebaut, die den Zugriff auf den Katalog verhindert. Der vorliegende Beitrag zeigt, wie Sie Anfragen an die Amazon Webservices signieren und wieder problemlos auf die Daten zugreifen können.

An dieser Stelle sei vorab erwähnt, dass Amazon den Zugriff auf seine Webservices an die Einhaltung der Nutzungsbedingungen knüpft. Diese besagen beispielsweise, dass die Abfrage von Produktdaten das Gewinnen von Kunden zum Ziel haben sollte – etwa, indem Sie die Produkte mithilfe dieser Informationen von Ihrer eigenen Webseite aus verlinken (damit ließe sich nebenher auch noch eine kleine Provision verdienen).

Ablauf

Bevor Sie die Dienste etwa über die Beispieldatenbank nutzen können, brauchen Sie einen Developer-Account, unter dem Sie die Anfragen absetzen können.

Der Rest ist prinzipiell das simple Zusammenstellen einer REST-Abfrage des Webservices, also das Versenden einer Abfrage, die wie ein Link aufgebaut ist und entsprechende Parameter enthält, und das Empfangen und Auswerten der Antwort des Webservices im XML-Format (bei diesem Vorgang kommen Methoden der Bibliothek Microsoft XML, vx.0 zum Einsatz – bitte daher die aktuellste verfügbare Version als Verweis hinzufügen). Gegenüber der Variante aus den oben erwähnten Beiträgen von 2008 kommt nun allerdings noch ein Schritt hinzu: Sie müssen die Parameterliste, also den wesentlichen Teil der Anfrage, signieren. Bei der Signatur handelt es sich um einen SHA256-verschlüsselten HMAC, also einen Hash-basierten Nachrichten-Authentifizierungs-Code. Diesen hängen Sie als weiteren Parameter an die Liste der Parameter an. Zum Erstellen der Signatur verwenden Sie neben der Parameterliste noch den nur Ihnen und Amazon bekannten geheimen Schlüssel. Amazon kann nach dem Erhalt Ihrer Anfrage anhand der Signatur prüfen, ob diese tatsächlich mit Ihrem geheimen Schlüssel signiert wurde.

Developer-Account holen

Amazon bietet eine ganze Reihe Webservices für die verschiedensten Bereiche an, zum Beispiel Anwendungs-Hosting, Backup und Speicherung, Datenbanken und E-Commerce. Alle werden mehr oder weniger beworben – nur Informationen über die Product Advertising API, die den Zugriff auf den Produktkatalog erlaubt, sind schwer zu finden. Sie finden über den folgenden Link direkt dorthin: aws.amazon.com/associates. Direkt dort können Sie sich auch registrieren und kurz danach auf Ihren Account zugreifen. Für den Zugriff auf den Produktkatalog benötigen Sie nur zwei Dinge: Ihre Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel.

Beides erhalten Sie, wenn Sie einem Link in der Begrüßungsmail nach der Anmeldung folgen. Wenn Sie einen Bereich wie den aus Abb. 1 vorfinden, sind Sie richtig.

pic002.png

Abb. 2: Daten für den Zugriff auf den Webservice

Request zusammenstellen

Der Kern der hier beschriebenen Lösung ist das Zusammenstellen eines Requests und die Auswertung der im XML-Format gelieferten Antwort. Der Request sieht beispielsweise wie folgt aus (in einer Zeile):

http://ecs.amazonaws.de/onca/xml
AWSAccessKeyId=AKIAJJDXSEUYLWWOE27Q
&Operation=ItemSearch
&Power=Author%3Aminhorst
&ResponseGroup=Medium
&SearchIndex=Books
&Service=AWSECommerceService
&Timestamp=2011-09-11T10%3A37%3A55Z
&Version=2009-01-06
&Signature=2Fu1PG8ojlEK6RSodV1sTQUyLzEQ8%2FeFLWFUbSsL1so%3D

Die Funktion GetRequest aus Listing 1 erwartet drei Parameter:

Listing 1: Zusammensetzen des Requests

Public Function GetRequest(strSearch As String, intPage As Integer, strRequest As String) As Boolean
    Dim strDeveloperToken As String
    Dim strSignatureBase As String
    Dim strSignatureKey As String
    Dim strSignature As String
    Dim db As DAO.Database
    Dim strParameterliste As String
    Dim strOAuthHeader As String
    Dim objXMLHTTP As MSXML2.XMLHTTP
    Dim objxml As MSXML2.DOMDocument
    Dim I As Integer
    Dim strDomain As String
    strDeveloperToken = cDeveloperToken
    strDomain = "ecs.amazonaws.de"
    Set db = CurrentDb
    db.Execute "DELETE FROM tblParameters", dbFailOnError
    AddParameter "Service", "AWSECommerceService"
    AddParameter "Operation", "ItemSearch"
    AddParameter "SearchIndex", "Books"
    AddParameter "ResponseGroup", "Medium"
    AddParameter "Version", "2011-08-01"
    AddParameter "Timestamp", TimeStamp_Amazon
    AddParameter "Power", strSearch
    AddParameter "AssociateTag", "amisoft"
    If intPage > 1 Then
        AddParameter "ItemPage", intPage
    End If
    strParameterliste = "AWSAccessKeyId=" & cDeveloperToken & "&"
    strParameterliste = strParameterliste & GetParameters
    strSignatureBase = "GET\\n" & strDomain & "\\n/onca/xml\\n" & strParameterliste
    strSignatureKey = "<Geheimer Schlüssel>"
    strSignature = SignRequest(strSignatureKey, strSignatureBase)
    strRequest = "http://" & strDomain & "/onca/xml" & strParameterliste & "&Signature=" _
        & URLEncode(strSignature)
    GetRequest = True
End Function
  • strSearch: Suchausdruck, zum Beispiel author:minhorst
  • intPage: Nummer der Suchergebnis-Seite
  • strRequest: Rückgabeparameter, erwartet den zusammengesetzten Request als String

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar