{"id":55000799,"date":"2011-10-01T00:00:00","date_gmt":"2020-05-22T21:58:16","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=799"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Amazon_Webservices_mit_OAuth_nutzen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/","title":{"rendered":"Amazon Webservices mit OAuth nutzen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/00e61124262e4154bce03935d6271cd3\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>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&ouml;nnen. Der Beitrag B&uuml;cherverwaltung (www.access-im-unternehmen.de\/633) lieferte ein praktisches Beispiel f&uuml;r den Einsatz dieser Technik. In der Zwischenzeit hat sich einiges getan: Amazon hat eine zus&auml;tzliche H&uuml;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&ouml;nnen.<\/b><\/p>\n<p>An dieser Stelle sei vorab erw&auml;hnt, dass Amazon den Zugriff auf seine Webservices an die Einhaltung der Nutzungsbedingungen kn&uuml;pft. Diese besagen beispielsweise, dass die Abfrage von Produktdaten das Gewinnen von Kunden zum Ziel haben sollte &#8211; etwa, indem Sie die Produkte mithilfe dieser Informationen von Ihrer eigenen Webseite aus verlinken (damit lie&szlig;e sich nebenher auch noch eine kleine Provision verdienen).<\/p>\n<p><b>Ablauf<\/b><\/p>\n<p>Bevor Sie die Dienste etwa &uuml;ber die Beispieldatenbank nutzen k&ouml;nnen, brauchen Sie einen Developer-Account, unter dem Sie die Anfragen absetzen k&ouml;nnen.<\/p>\n<p>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&auml;lt, und das Empfangen und Auswerten der Antwort des Webservices im XML-Format (bei diesem Vorgang kommen Methoden der Bibliothek <b>Microsoft XML, vx.0 <\/b>zum Einsatz &#8211; bitte daher die aktuellste verf&uuml;gbare Version als Verweis hinzuf&uuml;gen). Gegen&uuml;ber der Variante aus den oben erw&auml;hnten Beitr&auml;gen von 2008 kommt nun allerdings noch ein Schritt hinzu: Sie m&uuml;ssen die Parameterliste, also den wesentlichen Teil der Anfrage, signieren. Bei der Signatur handelt es sich um einen SHA256-verschl&uuml;sselten HMAC, also einen Hash-basierten Nachrichten-Authentifizierungs-Code. Diesen h&auml;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&uuml;ssel. Amazon kann nach dem Erhalt Ihrer Anfrage anhand der Signatur pr&uuml;fen, ob diese tats&auml;chlich mit Ihrem geheimen Schl&uuml;ssel signiert wurde.<\/p>\n<p><b>Developer-Account holen<\/b><\/p>\n<p>Amazon bietet eine ganze Reihe Webservices f&uuml;r die verschiedensten Bereiche an, zum Beispiel Anwendungs-Hosting, Backup und Speicherung, Datenbanken und E-Commerce. Alle werden mehr oder weniger beworben &#8211; nur Informationen &uuml;ber die <b>Product Advertising API<\/b>, die den Zugriff auf den Produktkatalog erlaubt, sind schwer zu finden. Sie finden &uuml;ber den folgenden Link direkt dorthin: <b>aws.amazon.com\/associates<\/b>. Direkt dort k&ouml;nnen Sie sich auch registrieren und kurz danach auf Ihren Account zugreifen. F&uuml;r den Zugriff auf den Produktkatalog ben&ouml;tigen Sie nur zwei Dinge: Ihre Zugriffsschl&uuml;ssel-ID und den geheimen Zugriffsschl&uuml;ssel.<\/p>\n<p>Beides erhalten Sie, wenn Sie einem Link in der Begr&uuml;&szlig;ungsmail nach der Anmeldung folgen. Wenn Sie einen Bereich wie den aus Bild 1 vorfinden, sind Sie richtig.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/Amazon-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Daten f&uuml;r den Zugriff auf den Webservice<\/span><\/b><\/p>\n<p><b>Request zusammenstellen<\/b><\/p>\n<p>Der Kern der hier beschriebenen L&ouml;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):<\/p>\n<pre>http:\/\/ecs.amazonaws.de\/onca\/xml\r\nAWSAccessKeyId=AKIAJJDXSEUYLWWOE27Q\r\n&amp;Operation=ItemSearch\r\n&amp;Power=Author%3Aminhorst\r\n&amp;ResponseGroup=Medium\r\n&amp;SearchIndex=Books\r\n&amp;Service=AWSECommerceService\r\n&amp;Timestamp=2011-09-11T10%3A37%3A55Z\r\n&amp;Version=2009-01-06\r\n&amp;Signature=2Fu1PG8ojlEK6RSodV1sTQUyLzEQ8%2FeFLWFUbSsL1so%3D<\/pre>\n<p>Die Funktion <b>GetRequest<\/b> aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-44-anchor\">Listing 1<\/a><\/span> erwartet drei Parameter:<\/p>\n<p class=\"listingueberschrift\">Listing 1: Zusammensetzen des Requests<\/p>\n<pre>Public Function GetRequest(strSearch As String, intPage As Integer, strRequest As String) As Boolean\r\n    Dim strDeveloperToken As String\r\n    Dim strSignatureBase As String\r\n    Dim strSignatureKey As String\r\n    Dim strSignature As String\r\n    Dim db As DAO.Database\r\n    Dim strParameterliste As String\r\n    Dim strOAuthHeader As String\r\n    Dim objXMLHTTP As MSXML2.XMLHTTP\r\n    Dim objxml As MSXML2.DOMDocument\r\n    Dim I As Integer\r\n    Dim strDomain As String\r\n    strDeveloperToken = cDeveloperToken\r\n    strDomain = &quot;ecs.amazonaws.de&quot;\r\n    Set db = CurrentDb\r\n    db.Execute &quot;DELETE FROM tblParameters&quot;, dbFailOnError\r\n    AddParameter &quot;Service&quot;, &quot;AWSECommerceService&quot;\r\n    AddParameter &quot;Operation&quot;, &quot;ItemSearch&quot;\r\n    AddParameter &quot;SearchIndex&quot;, &quot;Books&quot;\r\n    AddParameter &quot;ResponseGroup&quot;, &quot;Medium&quot;\r\n    AddParameter &quot;Version&quot;, &quot;2011-08-01&quot;\r\n    AddParameter &quot;Timestamp&quot;, TimeStamp_Amazon\r\n    AddParameter &quot;Power&quot;, strSearch\r\n    AddParameter &quot;AssociateTag&quot;, &quot;amisoft&quot;\r\n    If intPage &gt; 1 Then\r\n        AddParameter &quot;ItemPage&quot;, intPage\r\n    End If\r\n    strParameterliste = &quot;AWSAccessKeyId=&quot; &amp; cDeveloperToken &amp; &quot;&amp;&quot;\r\n    strParameterliste = strParameterliste &amp; GetParameters\r\n    strSignatureBase = &quot;GET\\n&quot; &amp; strDomain &amp; &quot;\\n\/onca\/xml\\n&quot; &amp; strParameterliste\r\n    strSignatureKey = &quot;&lt;Geheimer Schl&uuml;ssel&gt;&quot;\r\n    strSignature = SignRequest(strSignatureKey, strSignatureBase)\r\n    strRequest = &quot;http:\/\/&quot; &amp; strDomain &amp; &quot;\/onca\/xml&quot; &amp; strParameterliste &amp; &quot;&amp;Signature=&quot; _\r\n        &amp; URLEncode(strSignature)\r\n    GetRequest = True\r\nEnd Function<\/pre>\n<ul>\n<li class=\"aufz-hlung\"><b>strSearch<\/b>: Suchausdruck, zum Beispiel <b>author:minhorst<\/b><\/li>\n<li class=\"aufz-hlung\"><b>intPage<\/b>: Nummer der Suchergebnis-Seite<\/li>\n<li class=\"aufz-hlung\"><b>strRequest<\/b>: R&uuml;ckgabeparameter, erwartet den zusammengesetzten Request als String<\/li>\n<\/ul>\n<p><!--30percent--><\/p>\n<p>Die Routine verwendet zun&auml;chst eine weitere Funktion namens <b>AddParameter<\/b>, um alle Parameter in einer Tabelle namens <b>tblParameter <\/b>zu speichern. Diese Tabelle sieht nach dem Einf&uuml;gen der Parameter wie in Bild 2 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/Amazon-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Zugriffsschl&uuml;ssel f&uuml;r die Amazon Webservices<\/span><\/b><\/p>\n<p>Warum speichern wir die Parameter in einer Tabelle Nun: Zum Ermitteln der Signatur m&uuml;ssen Sie die Parameter in alphabetischer Reihenfolge angeben, weshalb diese vorher sortiert werden m&uuml;ssen. Und da wir schon mit Access arbeiten, schreiben wir die Parameter schnell in eine Tabelle und ermitteln die richtige Reihenfolge &uuml;ber eine entsprechend sortierte Abfrage. Die Routine legt die folgenden Parameter an:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Service<\/b>: Zu benutzender Webservice von Amazon, hier <b>AWSECommerceService<\/b><\/li>\n<li class=\"aufz-hlung\"><b>AWSAccessKeyId<\/b>: Ihr &ouml;ffentlicher Amazon-Schl&uuml;ssel, den Sie nach der Anmeldung an die Amazon Webservices erhalten.<\/li>\n<li class=\"aufz-hlung\"><b>Operation<\/b>: Durchzuf&uuml;hrende Operation, hier eine Suche (<b>ItemSearch<\/b>). Sie k&ouml;nnen &uuml;ber den Webservice auch etwa Einkaufslisten erstellen und bearbeiten (f&uuml;r weitere Parameter siehe <b>http:\/\/docs.amazonwebservices.com\/AWSECommerceService\/latest\/DG\/index.htmlAPPNDX_SearchIndexValues.html<\/b>).<\/li>\n<li class=\"aufz-hlung\"><b>SearchIndex<\/b>: Die Prozedur <b>GetRequest<\/b> geht davon aus, dass Sie im B&uuml;cherbestand von Amazon suchen m&ouml;chten (Books). Falls Sie eine andere Kategorie oder gar alle Kategorien durchsuchen m&ouml;chten, finden Sie die &uuml;brigen Werte f&uuml;r den Parameter <b>SearchIndex <\/b>unter <b>http:\/\/docs.amazonwebservices.com\/AWSECommerceService\/latest\/DG\/index.htmlAPPNDX_SearchIndexValues.html<\/b>.<\/li>\n<li class=\"aufz-hlung\"><b>ResponseGroup<\/b>: Gibt an, welche Informationen Amazon zur&uuml;ckliefern soll, also beispielsweise nur den Titel der gefundenen B&uuml;cher et cetera. Die m&ouml;glichen Angaben finden Sie unter <b>http:\/\/docs.amazonwebservices.com\/AWSECommerceService\/latest\/DG\/index.htmlAPPNDX_SearchIndexValues.html<\/b>.<\/li>\n<li class=\"aufz-hlung\"><b>Version<\/b>: Gibt die zu verwendende API-Version an. Eine &Uuml;bersicht finden Sie unter <b>http:\/\/aws.amazon.com\/archives\/Product-Advertising-API<\/b>.<\/li>\n<li class=\"aufz-hlung\"><b>Timestamp<\/b>: Aktueller Zeitstempel, der mit der Funktion <b>TimeStamp_Amazon <\/b>ermittelt wird.<\/li>\n<li class=\"aufz-hlung\"><b>Power<\/b>: Der eigentliche Suchausdruck, zum Beispiel <b>author:minhorst<\/b>.<\/li>\n<li class=\"aufz-hlung\"><b>AssociateTag<\/b>: Ihre Kennung, mit der Sie sich bei Amazon als Partner zu erkennen geben. Diese Angabe ist zwar ein Pflichtfeld, solange Sie den Webservice nur zum Durchsuchen verwenden, geben Sie hier eine beliebige Zeichenkette an &#8211; bislang funktioniert dies noch. Anderenfalls m&uuml;ssen Sie sich als Partner anmelden und einen regul&auml;ren Wert als <b>AssociateTag<\/b> angeben: <b>https:\/\/partnernet.amazon.de<\/b>.<\/li>\n<li class=\"aufz-hlung\"><b>Page<\/b>: Beim ersten Aufruf brauchen Sie diesen Parameter nicht zu &uuml;bergeben. Gegebenenfalls liefert der Webservice jedoch nicht alle Ergebnisse mit dem ersten Response. Dann k&ouml;nnen Sie der Response die Gesamtzahl der Antwortseiten entnehmen. Um weitere Seiten einzulesen, &uuml;bergeben Sie die jeweilige Seitenzahl mit dem <b>Page<\/b>-Parameter. Die Funktion <b>GetRequest <\/b>wird dann f&uuml;r weitere Seiten erneut aufgerufen &#8211; siehe weiter unten.<\/li>\n<\/ul>\n<p><b>Zusammensetzen der Parameterliste<\/b><\/p>\n<p>Vor der Ermittlung der Signatur f&uuml;gt die Routine die zuvor in der Tabelle <b>tblParameters <\/b>gespeicherten Parameter zu einer Parameterliste zusammen. Bei den Parametern gibt es eine Ausnahme: <b>AWSAccessKeyID <\/b>muss immer als erster Parameter angegeben werden. Daher wird dieser Parameter nicht mit den &uuml;brigen Parametern in der Tabelle <b>tblParameters<\/b> gespeichert und sp&auml;ter sortiert ausgelesen, sondern gleich in die Variable <b>strParameterliste<\/b> eingetragen.<\/p>\n<p>Die Funktion <b>GetParameters <\/b>liest dann die in der Tabelle <b>tblParameters <\/b>gespeicherten Parameter aus und setzt eine entsprechende Zeichenkette zusammen. Schlie&szlig;lich wird dieser noch die folgende Zeichenkette vorangestellt:<\/p>\n<pre>GET\\necs.amazonaws.de\\n\/onca\/xml\\n<\/pre>\n<p>Die <b>\\n<\/b>-Ausdr&uuml;cke stehen stellvertretend f&uuml;r einen Zeilenumbruch, da die gesamte Zeichenkette etwa so aussehen soll:<\/p>\n<pre>GET\r\necs.amazonaws.de\r\n\/onca\/xml\r\nAWSAccessKeyId=AKIAJJDXSEUYLWWOE27Q&amp;AssociateTag=amisoft&amp;Operation=ItemSearch&amp;Power=author%3Aminhorst&amp;ResponseGroup=Medium&amp;SearchIndex=Books&amp;Service=AWSECommerceService&amp;Timestamp=2011-09-11T13%3A27%3A50Z&amp;Version=2011-08-01<\/pre>\n<p>Dieser Ausdruck wird dann von der Funktion <b>SignRequest <\/b>signiert. Das bedeutet, dass die Funktion eine Signatur erstellt und diese zur&uuml;ckliefert (mehr siehe weiter unten). Die Funktion <b>SignRequest <\/b>ist eine abgewandelte Variante aus einem Beispiel von der Seite <b>http:\/\/www.vbforums.com\/showpost.phps=2afdba68f461a4514d5bc9470e21765f&amp;p=4063769&amp;postcount=8<\/b>. Sie erwartet zwei Parameter:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>strSignaturKey<\/b>: Der geheime Schl&uuml;ssel, den Sie Ihrem Entwicklerkonto bei Amazon entnehmen k&ouml;nnen.<\/li>\n<li class=\"aufz-hlung\"><b>strSignatureBase<\/b>: Der zu signierende Ausdruck.<\/li>\n<\/ul>\n<p>Die Signatur sieht beispielsweise so aus:<\/p>\n<pre>UNNf+RoO3C+mtxt9+iGD+vPrZwkmSz+LbTjE1AEj<\/pre>\n<p>Die Funktion <b>SignRequest <\/b>verwendet weitere Hilfsfunktionen und sogar eine komplette Klasse zum Berechnen der Signatur. Die Klasse hei&szlig;t <b>clsHMACSHA256<\/b>, und als weitere Funktion kommt die im gleichen Modul befindliche Routine <b>URLEncode <\/b>zum Einsatz. <b>URLEncode <\/b>wandelt Sonderzeichen in f&uuml;r den Webservice lesbare Codes um (aus dem Plus-Zeichen (<b>+<\/b>) wird beispielsweise <b>%2B<\/b>). Eine Beschreibung dieser Funktion finden Sie im Beitrag <b>Funktionen f&uuml;r Entwickler<\/b> (<b>www.access-im-unternehmen.de\/802<\/b>)<\/p>\n<p>Zu guter Letzt f&uuml;gt die Funktion <b>GetRequest<\/b> die Parameter mit der eigentlich aufzurufenden Webseite und der Parameterliste zusammen. Hier ist ein beispielhaftes Ergebnis:<\/p>\n<pre>http:\/\/ecs.amazonaws.de\/onca\/xml\r\nAWSAccessKeyId=AKIAJJDXSEUYLWWOE27Q\r\n&amp;AssociateTag=amisoft\r\n&amp;Operation=ItemSearch\r\n&amp;Power=Author%3Aminhorst\r\n&amp;ResponseGroup=Medium\r\n&amp;SearchIndex=Books\r\n&amp;Service=AWSECommerceService\r\n&amp;Timestamp=2011-09-11T13%3A27%3A50Z\r\n&amp;Version=2011-08-01\r\n&amp;Signature=gfNzcAeGMDkTOIm1OszL6HsoNSXqbV0eOK28NIDwqWU%3D<\/pre>\n<p>Dieser Ausdruck wird in den R&uuml;ckgabeparameter <b>strRequest <\/b>geschrieben, damit die aufrufende Prozedur diesen f&uuml;r den eigentlichen Request einsetzen kann.<\/p>\n<p><b>Funktion AddParameter<\/b><\/p>\n<p>Die Funktion <b>AddParameter <\/b>erwartet den Namen und den Wert eines Parameters und speichert diesen als neuen Datensatz in der Tabelle <b>tblParameters<\/b>:<\/p>\n<pre>Public Function AddParameter(varParameter As Variant, varValue As Variant)\r\n    Dim db As DAO.Database\r\n    Set db = CurrentDb\r\n    db.Execute &quot;INSERT INTO tblParameters(Parametername, Parametervalue) VALUES (''&quot; &amp; varParameter &amp; &quot;'', ''&quot; &amp; varValue &amp; &quot;'')&quot;, dbFailOnError\r\n    Set db = Nothing\r\nEnd Function<\/pre>\n<p><b>Funktion Timestamp_Amazon<\/b><\/p>\n<p>Die Funktion <b>Timestamp_Amazon <\/b>liefert das aktuelle Datum plus Uhrzeit etwa im Format <b>2011-09-11T13:45:36Z<\/b>:<\/p>\n<pre>Public Function TimeStamp_Amazon()\r\n    TimeStamp_Amazon = Format(Now, &quot;yyyy-mm-ddThh:nn:ssZ&quot;)\r\nEnd Function<\/pre>\n<p><b>Funktion GetParameters<\/b><\/p>\n<p>Die Funktion <b>GetParameters <\/b>liest die in der Tabelle <b>tblParameters<\/b> gespeicherten Parameter ein, wobei die Parameternamen gleich in alphabetischer Reihenfolge sortiert werden. In einer <b>Do While<\/b>-Schleife &uuml;ber alle Datens&auml;tze baut die Routine die Parameterliste zusammen. Dabei werden die einzelnen Parameternamen und -werte durch ein Gleichheitszeichen und die Name-Wert-Paare durch das Kaufmanns-Und voneinander getrennt:<\/p>\n<pre>Public Function GetParameters() As String\r\n    Dim db As DAO.Database\r\n    Dim str As String\r\n    Dim rstParameters As DAO.Recordset\r\n    Set db = CurrentDb\r\n    Set rstParameters = db.OpenRecordset(&quot;SELECT * FROM tblParameters ORDER BY Parametername&quot;, dbOpenDynaset)\r\n    Do While Not rstParameters.EOF\r\n        str = str &amp; &quot;&amp;&quot; &amp;\r\n        rstParameters!Parametername &amp; &quot;=&quot; &amp; URLEncode(rstParameters!ParameterValue)\r\n        rstParameters.MoveNext\r\n    Loop\r\n    If Left(str, 1) = &quot;&amp;&quot; Then\r\n        str = Mid(str, 2)\r\n    End If\r\n    GetParameters = str\r\nEnd Function<\/pre>\n<p><b>Aufruf testen<\/b><\/p>\n<p>Den mit der Funktion <b>GetRequest <\/b>ermittelten Aufruf k&ouml;nnen Sie bereits testen &#8211; und zwar im Webbrowser. Verwenden Sie die folgende Prozedur, um einen Beispielaufruf zu generieren:<\/p>\n<pre>Public Sub Schnelltest()\r\n    Dim strRequest As String\r\n    GetRequest &quot;author:minhorst&quot;, 1, strRequest\r\n     Debug.Print strRequest\r\nEnd Sub<\/pre>\n<p>Das Ergebnis kopieren Sie aus dem Direktfenster in die Addressleiste des Webbrowsers. Das Ergebnis sieht etwa wie in Bild 3 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/Amazon-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Test des Requests im Webbrowser<\/span><\/b><\/p>\n<p><b>Integration in Buchverwaltung<\/b><\/p>\n<p>Die hier vorgestellte Technik zum Zusammenstellen von Requests f&uuml;r die Amazon-Webservices k&ouml;nnen Sie beispielsweise in der L&ouml;sung verwenden, die wir im Beitrag <b>B&uuml;cherverwaltung <\/b>(<b>www.access-im-unternehmen.de\/633<\/b>) vorgestellt haben (s. Bild 4).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/Amazon-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: B&uuml;cherverwaltung mit aktualisierter OAuth-Authentifizierung<\/span><\/b><\/p>\n<p>Damit die bestehende B&uuml;cherverwaltung wie gewohnt funktioniert, f&uuml;hren Sie die folgenden Schritte durch:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Ersetzen Sie im Modul <b>mdlREST <\/b>die Routine <b>GetRequest<\/b> durch die in der Beispieldatenbank zu diesem Beitrag enthaltene Version. <\/li>\n<li class=\"aufz-hlung\">F&uuml;gen Sie im Kopf des Moduls <b>mdlREST <\/b>die Zeile <b>Public Const cSignatureKey As String = &quot;[Key]&quot; <\/b>hinzu.<\/li>\n<li class=\"aufz-hlung\">Tragen Sie dort f&uuml;r <b>[Key] <\/b>Ihren eigenen geheimen Schl&uuml;ssel ein.<\/li>\n<li class=\"aufz-hlung\">F&uuml;gen Sie das Standardmodul <b>mdlOAuth <\/b>hinzu.<\/li>\n<li class=\"aufz-hlung\">F&uuml;gen Sie das Klassenmodul <b>clsHMACSHA256 <\/b>hinzu.<\/li>\n<li class=\"aufz-hlung\">F&uuml;gen Sie die Tabelle <b>tblParameters <\/b>hinzu.<\/li>\n<\/ul>\n<p>Fertig! Sie k&ouml;nnen die B&uuml;cherverwaltung nun mit der neuen Authentifizierungsmethode einsetzen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Buecherverwaltung.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{23559437-57F3-4E2B-B8BE-398E773EF627}\/aiu_799.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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&ouml;nnen. Der Beitrag B&uuml;cherverwaltung (www.access-im-unternehmen.de\/633) lieferte ein praktisches Beispiel f&uuml;r den Einsatz dieser Technik. In der Zwischenzeit hat sich Einiges getan: Amazon hat eine zus&auml;tzliche H&uuml;rde eingebaut, die den Zugriff auf den Katalog verhinderte. Der vorliegende Beitrag zeigt, wie Sie Anfragen an die Amazon Webservices signieren und wieder problemlos auf die Daten zugreifen k&ouml;nnen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662011,66052011,44000026],"tags":[],"class_list":["post-55000799","post","type-post","status-publish","format-standard","hentry","category-662011","category-66052011","category-Interaktiv"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Amazon Webservices mit OAuth nutzen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Amazon Webservices mit OAuth nutzen\" \/>\n<meta property=\"og:description\" content=\"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&ouml;nnen. Der Beitrag B&uuml;cherverwaltung (www.access-im-unternehmen.de\/633) lieferte ein praktisches Beispiel f&uuml;r den Einsatz dieser Technik. In der Zwischenzeit hat sich Einiges getan: Amazon hat eine zus&auml;tzliche H&uuml;rde eingebaut, die den Zugriff auf den Katalog verhinderte. Der vorliegende Beitrag zeigt, wie Sie Anfragen an die Amazon Webservices signieren und wieder problemlos auf die Daten zugreifen k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:58:16+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg08.met.vgwort.de\/na\/00e61124262e4154bce03935d6271cd3\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"11\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Amazon Webservices mit OAuth nutzen\",\"datePublished\":\"2020-05-22T21:58:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/\"},\"wordCount\":1656,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/00e61124262e4154bce03935d6271cd3\",\"articleSection\":[\"2011\",\"5\\\/2011\",\"Interaktiv\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/\",\"name\":\"Amazon Webservices mit OAuth nutzen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/00e61124262e4154bce03935d6271cd3\",\"datePublished\":\"2020-05-22T21:58:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/00e61124262e4154bce03935d6271cd3\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/00e61124262e4154bce03935d6271cd3\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Amazon_Webservices_mit_OAuth_nutzen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Amazon Webservices mit OAuth nutzen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Amazon Webservices mit OAuth nutzen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/","og_locale":"de_DE","og_type":"article","og_title":"Amazon Webservices mit OAuth nutzen","og_description":"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&ouml;nnen. Der Beitrag B&uuml;cherverwaltung (www.access-im-unternehmen.de\/633) lieferte ein praktisches Beispiel f&uuml;r den Einsatz dieser Technik. In der Zwischenzeit hat sich Einiges getan: Amazon hat eine zus&auml;tzliche H&uuml;rde eingebaut, die den Zugriff auf den Katalog verhinderte. Der vorliegende Beitrag zeigt, wie Sie Anfragen an die Amazon Webservices signieren und wieder problemlos auf die Daten zugreifen k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:58:16+00:00","og_image":[{"url":"http:\/\/vg08.met.vgwort.de\/na\/00e61124262e4154bce03935d6271cd3","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"11\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Amazon Webservices mit OAuth nutzen","datePublished":"2020-05-22T21:58:16+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/"},"wordCount":1656,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/00e61124262e4154bce03935d6271cd3","articleSection":["2011","5\/2011","Interaktiv"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/","url":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/","name":"Amazon Webservices mit OAuth nutzen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/00e61124262e4154bce03935d6271cd3","datePublished":"2020-05-22T21:58:16+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/00e61124262e4154bce03935d6271cd3","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/00e61124262e4154bce03935d6271cd3"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Amazon_Webservices_mit_OAuth_nutzen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Amazon Webservices mit OAuth nutzen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000799","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000799"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000799\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000799"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000799"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000799"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}