David Web API

  • Hallo zusammen,


    wir versuchen derzeit die David Web API an unser ERP System anzubinden.

    Allerdings haben wir nicht wirklich eine Beschreibung dazu gefunden, welche das Einrichten entsprechend erklärt.

    Daher die Frage, ob schonmal jemand von euch damit gearbeitet hat und uns da evtl. weiterhelfen kann?


    Unser aktueller Stand ist, dass man irgendwie einen JWT (Json Web Token) in der "Swagger Dokumentation" hinterlegen muss, um per Rest API Abfrage dann verschiedene Funktionen nutzen zu können.

    Nun wissen wir nicht woher wir diesen Token bekommen. Man kann anscheinend einen auf der Seite jwt.io generieren lassen, allerdings fehlen uns da die nötigen Informationen welche Parameter mit den entsprechenden Werten dort mitgegeben werden müssen und ob das überhaupt der richtige Lösungsansatz ist.


    Vielen Dank im Voraus

    Nils

    • Offizieller Beitrag

    Hallo Nils,


    ich hab selbst noch nichts mit der WebAPI gemacht, nutze auch nicht den Smart Client.
    Mir ist die Authentifizierung über die Tobit Server ein Dorn im Auge - man muss dafür auch das lokale Benutzerkonto mit einem Chayns Konto verknüpfen.


    Ich hab mir das aber eben mal angeschaut.


    Grundsätzlich kannst Du die REST API Doku über die Adresse Deines Servers aufrufen:
    https://<externe-serveradresse>:8443/_docs/index.html#/


    Die GraphQL API Doku und Playground findest Du unter

    https://<externe-serveradresse>:8443/v1.0/graph/_playground


    Ein JWT ist ein Sicherheitstoken der nach dem Login mit Benutzername und Passwort erzeugt. Bei einer API macht man normalerweise eine Authentifizierung mittels Benutzername und Passwort und bekommt dann vom API Service einen JWT geliefert. Den schreibt man dann bei jeder Anfrage in den Header in der Form Authorization: Bearer <token>


    Eine Beschreibung dazu findest Du z.B. hier:
    https://www.predic8.de/bearer-…isierung-api-security.htm


    Um an Deinen JWT Token zu kommen, musst Du Dich mit Deiner chaynsID auf der Tobit Seite anmelden, dann rufst Du die Web Developer Konsole im Browser auf (Rechtsklick > Untersuchen) und wechselst auf die Konsole. Dort gibst Du


    console.log(chayns.env.user.tobitAccessToken)


    ein und bekommst den aktuellen Token zurück. Mit dem kannst Du die Authorisierung an den Dokus vornehmen, z.B. in der Swagger Doku über den Button Authorize, dort trägst Du dann Bearer <token> als Wert ein.

    Anschließend kannst Du z.b. bei ServerInfo auf Try out und dann auf Execute klicken und solltest entsprechende Daten angezeigt bekommen.

    Bei mir erscheint aber eine Meldung, dass ich mich mit einem Konto anmelden müsse, welches zu einer der aufgeführten SiteIDs passt, wovon eine die ID meiner Davidinstallation ist...denke da ist mit meinem Account was nicht ganz richtig.


    Wichtig ist auch zu verstehen, dass die Doku wirklich nur eine Doku zum testen ist - für eine Nutzung der API in einer Applikation muss man entsprechenden Code für die Nutzung einer REST oder GraphQL API programmieren und die Abfrage der benötigten Endpunkte bzw. Abfragen implementieren.


    Allerdings stellt sich jetzt die Frage, wie der Endpunkt für die Authorisierung innerhalb einer Applikation lautet...dort müsste man genau das gleiche machen, nämlich Benutzername und Passwort übergeben um den aktuellen JWT zu bekommen und diesen dann als Header (Authorization: Bearer <token>) bei den folgenden Anfragen zu übergeben. Dazu habe ich leider nichts in der Doku gefunden und so spontan auch keine Idee...


    Da der JWT nur eine Gültigkeit von drei Stunden hat, reicht es auch nicht, diesen einmalig auszulesen und in der Anwendung zu hinterlegen.


    Viele Grüße
    Jens

    • Offizieller Beitrag

    Hab gerade noch was dazu hinbekommen / herausgefunden.


    Man muss sich anscheinend am Smartclient anmelden und dort über die Webdeveloper Console wie oben beschrieben den JWT ausgeben lassen. Dieser funktioniert dann auch in der Swagger Doku. Ich hatte mich nur auf der Tobit Webseite mit der ChaynsID angemeldet, dann aber nicht den Smartclient gestartet.


    Bleibt aber weiterhin das Problem / die Frage, wie man die Authentifizierung aus einer Programmlogik realisiert.


    Achso, den Befehl console.log(chayns.env.user.tobitAccessToken) muss man übrigens eintippen, copy & paste verhindert der Browser aus Sicherheitsgründen - zumindest der Firefox.


    Viele Grüße
    Jens

    • Offizieller Beitrag

    Noch ein Update hierzu:


    Da auf der Tobit Seite von chanysSSO zur Authentifizerung die Rede ist und auch der entsprechende JWT verwendet werden muss, gehe ich davon aus, dass man irgendwo im Bereich der chanysAPI fündig wird

    No Limits - API | chayns.net
    chayns® API - No Limits - API | chayns.net
    chayns.site


    Auf die Schnelle konnte ich dort aber auch nichts finden.


    Am besten dazu mal bei Tobit nachfragen und gerne hier ergänzen.


    Viele Grüße
    Jens

  • Hallo Jens,


    vielen Dank für deine ausführlichen Antworten. Mit dem generierten Token funktionieren nun die REST API Abfragen.

    Falls ich eine Lösung zum automatischen generieren des Tokens finden sollte werde ich hier nochmal ein update dazu geben.


    Gruß

    Nils

  • Update:


    Ich habe eine Lösung für das Problem gefunden und den Access Token automatisch generiert.

    Nach Anfrage bei Tobit wurde mir folgende Doku zur Verfügung gestellt: https://chayns.site/open-id-connect
    Folgt man dieser Anleitung erhält man zunächst die Client ID und das Secret.

    Danach hinterlegt man dann eine sog. "redirect uri". In unserem Fall haben wir da die URL unseres ERP Systems genommen.

    Im darauffolgenden Schritt muss man nun die URL: https://auth.tobit.cloud/v3/openid?client_id=<clientId>&redirect_uri={redirectUri} mit der entsprechenden Client ID und redirect uri im Browser aufgerufen werden. Dort muss man sich dann bei der Chayns Site anmelden (Wichtig! Es muss sich als Sitemanager angemeldet werden) und wird danach auf die angelegte redirect uri weitergeleitet.

    Nach der Weiterleitung findet man in der URL einen Code parameter. Diesen Code braucht man dann, um den Access Token und den Refresh Token anzufragen. Später kann man den Access Token dann über den Refresh Token generieren.

    Dieser Access Token ist zwar nur eine Stunde gültig, kann allerdings vor jeder API abfrage neu generiert werden, daher ist das egal.


    Für die Header der Abfragen habe ich : (User-Agent: hier beliebiges Wort einfügen) und (Content-Type: application/x-www-form-urlencoded) verwendet.


    Ich hoffe ich konnte damit ein wenig weiterhelfen

    Viele Grüße

    Nils

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!