Inhalte aufrufen

Profilbild

Web Api

Web Api

  • Bitte melden Sie sich an, um eine Antwort zu verfassen.
7 Antworten zu diesem Thema

#1 Mike Haid

Mike Haid

    Member

  • Members
  • 10 Beiträge

Geschrieben: 01 July 2015 - 21:45

Hallo,

 

ein Kunde von uns möchte gerne auf Smartstore (2.2.1.0)  umstellen. Wir sollen nun für unser ERP-System die Schnittstellen erstellen bzw die Machbarkeit prüfen.

 

Soweit so gut.

 

Die Beispieldateien habe ich gefunden und auch entsprechend umgesetzt. Es funktioniert im Prinzip auch... nur habe ich nun folgendes Problem, welches aber das gesamte Projekt scheitern lassen könnte.

 

Führe ich direkt hintereinander zwei Requests auf z.B. Orders und OrderItems aus, so scheitert die zweite Abfrage in der Regel mit einem 401 (nicht autorisiert).

 

Warte ich nun aber ein paar Sekunden, geht es.

 

Woran kann das liegen?

 

Gruß

Mike Haid

Nexware GmbH

 

PS: Ich hab ein kleines VB-Testprogramm Angehängte Datei  SmartStoreAPITest.zip   609.54K   7 Anzahl Downloads (VS13) angehängt (in der Init() die richtigen Werte für Public/SecretKey eintragen). Vielleicht hab ich ja auch was falsch verstanden :-)

 



#2 Marcus Gesing

Marcus Gesing

    SmartStore AG

  • Administrators
  • 3424 Beiträge

Geschrieben: 01 July 2015 - 23:47

Bei einer fehlgeschlagenen Authorisierung wird der genaue Grund als ID über den Header "HmacResultId"
und als Kurzbeschreibung über "HmacResultDesc" zurückgegeben.
 
Das Problem konnte ich mit dem VB-Testprogramm über eine bei mir lokal laufende API nicht reproduzieren. Der Zugriff auf den
im Tool hinterlegten Server schlägt mangels Erreichbarkeit fehl ("Die Verbindung mit dem Remoteserver kann nicht hergestellt werden").

Schöne Grüße aus Düsseldorf,
Marcus Gesing


#3 Mike Haid

Mike Haid

    Member

  • Members
  • 10 Beiträge

Geschrieben: 02 July 2015 - 08:44

Hallo,
 
ähm diese Headereinträge gibt es im Repsone nicht. Aber im Ereignisprotokoll des Shops steht:

 

--

Der gesendete Zeitstempel ist älter als die letzte Anfrage des Nutzers.
Accept: application/json, text/javascript, */*
Accept-Charset: UTF-8
Authorization: SmNetHmac1 7QX3dLrdr6mi6oAngzxEqQqsQXdF1if0xoI20+ZBdZA=
Host: shop.naturello.de
User-Agent: i7ERPConnect
SmartStore-Net-Api-PublicKey: 66b2795abdd377ed11868dfd874cf986
SmartStore-Net-Api-Date: 2015-07-02T07:24:49.7605925Z

--

 

Macht ja keinen Sinn, da ich ja den Timestamp vor jedem Request aktualisiere (siehe Code). Gestern kam dann aber zwischendurch noch "userhasnopermisson"

 

Ich habe die Einträge im Testprogramm Angehängte Datei  SmartStoreAPITest.zip   609.59K   6 Anzahl Downloads mal entsprechend geändert, so dass es mit unserem Testshop funktioniert.

 

Dieser Shop läuft auf einem Windows Server 2012 (Standard). Das gleiche Problem besteht aber auch mit meinem lokalen Testshop unter Windows Server 2008.

 

Testprogramm starten und doppelklick auf z.B. Countries, danach doppelklicken auf z.b. Currencies und schon geht es schief.

 

 

 -- Sysinfo --

 

SmartStore.NET Version

2.2.1.0 Auf Aktualisierung prüfen

Erstellt am

Donnerstag, 25. Juni 2015 14:53:13

Betriebssystem

Microsoft Windows NT 6.3.9600.0

ASP.NET Info

v4.0.30319

Full trust level

True

Zeitzone des Servers

Mitteleuropäische Zeit

Ortszeit des Servers

Donnerstag, 2. Juli 2015 09:41:54

GMT/UTC

Donnerstag, 2. Juli 2015 07:41:54

HTTP_HOST

shop.naturello.de

Daten-Provider

SQL Server

Größe der Datenbank

11,89 MB Verkleinern

Geladene Assemblies


#4 Marcus Gesing

Marcus Gesing

    SmartStore AG

  • Administrators
  • 3424 Beiträge

Geschrieben: 02 July 2015 - 09:45

Zu UserHasNoPermission: Die API-Zugangsdaten sind hinsichtlich Datenzugriff nicht allumfassend gültig, sondern werden stets in Bezug zu einem .NET-User vergeben. Dabei gelten auch die Rechte, die dieser User inne hat oder eben nicht inne hat. Beispiel: Besitzt der User nicht das Recht "ManageOrders", kann er auch nicht über die API Auftragsdaten abrufen oder gar ändern und bekommt folglich einen 401 mit UserHasNoPermission. Bitte mal dem User, dem die API-Zugangsdaten gewährt wurden, die Kundengruppe "Administrators" zuordnen. Dann kommt es nicht mehr zu dieser Ablehnung.
 
Zu "Der gesendete Zeitstempel ist älter als die letzte Anfrage des Nutzers": Der HMAC-Result lautet TimestampOlderThanLastRequest. Habe ich mit dem Testprogramm nicht reproduzieren können. Stattdessen bekomme ich häufig untere Exception.
 
"ähm diese Headereinträge gibt es im Repsone nicht."
Sie lesen die Header des Request- und nicht des Response-Objekts aus.

Angehängte Bilder


Schöne Grüße aus Düsseldorf,
Marcus Gesing


#5 Mike Haid

Mike Haid

    Member

  • Members
  • 10 Beiträge

Geschrieben: 02 July 2015 - 10:34

ist ja nur ein Testprogramm.

 

Liegt es irgendwie an der Serverkonfiguration?

 

Das Problem (ich mag als Softwerker nicht von Fehler reden ;-) ) lässt sich auch mit Ihrem API Testprogramm nachvollziehen.

 (im Quellcodepaket SmartStoreNET-2.2.1\SmartStoreNET-2.2.1\src\Tools\SmartStore.WebApi.Client\bin) 

Angehängte Datei  SmartStore.WebApi.Client.zip   345.83K   23 Anzahl Downloads

 

 

PK:66b2795abdd377ed11868dfd874cf986

SK:2861f1f02c252ad16272fb98731e09ed

StoreUrl:http://shop.naturello.de/

Method: GET

Version: v1

Path: /Countries

Query:$top=1

 

1. CallAPI

Angehängte Datei  AP1.JPG   112.34K   3 Anzahl Downloads

 

2. CallApi

Angehängte Datei  AP2.JPG   108.69K   2 Anzahl Downloads

 

 

Dankeschön für die Mühe

 

 

BTW: Die Einstellungen sind natürlich richtig eingestellt.

 

Angehängte Datei  settings.JPG   18.22K   3 Anzahl Downloads



#6 Marcus Gesing

Marcus Gesing

    SmartStore AG

  • Administrators
  • 3424 Beiträge

Geschrieben: 02 July 2015 - 12:03

Hab's jetzt auch mit dem .NET Api Client Tool getestet: Lokal bei mir kein Problem. Live-Shop auf dem SmartStore-Server kein Problem. shop.naturello.de Problem konnte ich erstmals reproduzieren: Immer wenn ein nachfolgender Request "zu dicht" auf den vorangegagenen folgt, lehnt er mit 401 TimestampOlderThanLastRequest ab. TimestampOlderThanLastRequest erfolgt, wenn die über den Header "SmartStore-Net-Api-Date" gelieferte Zeit kleiner oder gleich der Zeit der letzten API-Anfrage dieses Users ist.
 
Könnten Sie bitte mal die Uhrzeit des Servers synchronisieren. Die scheint ca. 12 Sekunden vor zu gehen. Meine Vermutung: Wenn ich mehr als 12 Sekunden mit der nachfolgenden Anfrage warte, gibt's keinen 401 TimestampOlderThanLastRequest mehr.
 
PS: Ich werde einen Vorgang aufnehmen, die Prüfung auf TimestampOlderThanLastRequest optional auch ausschalten zu können.

Angehängte Bilder


Schöne Grüße aus Düsseldorf,
Marcus Gesing


#7 Mike Haid

Mike Haid

    Member

  • Members
  • 10 Beiträge

Geschrieben: 02 July 2015 - 13:45

Jau das wars. Da hätte ich auch selbst draufkommen können. *schäm*

 

Ich bin irgendwie davon ausgegangen, dass sich der Server den externen Timestamp  merkt und mit diesem vergleicht. Das die Uhren mal falsch gehen kann ja immer mal vorkommen. 

 

Aber wenn es irgendwann mal zum abschalten geht.. so what

Bis dahin werde ich mir damit behelfen, dass ich den ServerTimestamp aus dem Response nehme und da ein paar Millisekunden daraufzähle und diesen dann für den Request benutze, dann bin ich erstmal auf der sicheren Seite.

 

Vielen Dank für die Hilfe

Gruß

Mike



#8 Marcus Gesing

Marcus Gesing

    SmartStore AG

  • Administrators
  • 3424 Beiträge

Geschrieben: 02 July 2015 - 16:20

Ich bin irgendwie davon ausgegangen, dass sich der Server den externen Timestamp  merkt und mit diesem vergleicht.

 

Ich habe das mal als Vorschlag mit den Vorgang aufgenommen.


Schöne Grüße aus Düsseldorf,
Marcus Gesing



Auch markiert mit einem oder mehrerer dieser Schlüsselwörter: Web Api