View Full Version : Webservice auf IBM i erstellen incl. OAuth2 - Berechtigung
Rainer Ross
21-07-20, 11:49
Hallo Dieter,
machbar in RPG ist es schon, aber aufwändig. Bisher habe ich für ein eigenes Projekt Oauth 1.0 in RPG implementiert, das funktioniert ganz gut. Nach meiner Information gibt es als Bezahlprogramm nur die bvstools für eine Oauth 2.0 native RPG Anwendung. Bisher kam auch keine kundenseitige Anfrage für so ein Projekt.
Herzliche Grüße
Rainer Ross
holgerscherer
21-07-20, 12:38
Danke für die Antworten. Aber der Sinn des Ganzen ist natürlich, unsere bestehenden RPG-Programme zu nutzen. Außerdem sollten die RPG-Programmierer in der Lage sein, den Webservice zu erweitern, ohne jedesmal auf die Hilfe eines Java Kollegen angewiesen zu sein.
Also erstens kann auch ein Java-Entwickler auf der i selbst sich um ein Java-Programm kümmern, und zweitens bleibt die Frage: wie oft und wo ist die Logik denn nun hinterlegt?
andreaspr@aon.at
21-07-20, 13:23
Um es mit D*B's Worten zu sagen:
Java-Aufrufe aus RPGLE sind aufwändig zu implementieren und sind mehr Huddel als nötig.
Zumal jeder Aufruf einer JAVA-Routine im RPG einen zusätzlichen JVM-Job generiert.
Auf seiner Internet-Seite http://www.bender-dv.de/ bietet er einen AppServer4RPG an.
Hiermit könnt ihr Java-Aufrufe in einer JVM kapseln und von jedem RPGLE aufrufen.
Das ist genau das was ich gesagt habe...
Ich habe ja gemeint dieses als eigenständiges "Microservice" (also ein eigener Job) laufen zu lassen.
Da hast du eben nur einen oder ein paar (je nach dem wieviel du da parallelisieren willst) und die haben fix ihre JVM.
Und die Kommunikation findet via Data Queue statt.
Also wenn du es strukturiert aufbaust, hast du diesen Teil komplett abgekapselt in einer Java-Box/Job und der Rest kann ganz normal in RPG laufen, ohne, dass dort irgendwelche JVMs oder so benötigt werden.
Hab ich schon oft gemacht, funktioniert super, schnell, einfach und flexibel zu skalieren.
dschroeder
21-07-20, 13:48
Also erstens kann auch ein Java-Entwickler auf der i selbst sich um ein Java-Programm kümmern, und zweitens bleibt die Frage: wie oft und wo ist die Logik denn nun hinterlegt?
Dieser Webservice wird Daten zurückliefern, deren Logik sich allein auf der IBM i befindet. Die RPG Entwickler sind die einzigen, die wissen, wo die Daten genau liegen und wie man drankommt. Um die Daten zu ermitteln, sind auf der i bereits RPG-Programm vorhanden. Wir finden es nicht sinnvoll, diese Logik nochmal in Java nachzubilden.
dschroeder
21-07-20, 13:50
Hallo Dieter,
machbar in RPG ist es schon, aber aufwändig. Bisher habe ich für ein eigenes Projekt Oauth 1.0 in RPG implementiert, das funktioniert ganz gut. Nach meiner Information gibt es als Bezahlprogramm nur die bvstools für eine Oauth 2.0 native RPG Anwendung. Bisher kam auch keine kundenseitige Anfrage für so ein Projekt.
Herzliche Grüße
Rainer Ross
Vielen Dank für deine Antwort, Rainer. Das bestärkt mich darin, die Authentifizierung in Java zu machen.
Natürlich kann man OAuth 2.0 auf IBM i benutzen. Ob als OAuth Provider oder Consumer es ist immer das gleiche: Man braucht das passende Serviceprogramm dazu. Glücklicherweise existiert dieses auch schon ... und zwar in dem Projekt ILEastic - einem Microservice Framework für IBM i. Es unterstützt Basic Auth und JWT Tokens. Bei den JWT Tokens ist man allerdings beschränkt auf HS256.
Ich habe damit in RPG einen Web Service geschrieben, der einen mit Node.js erstellten JWT Token für Auth verifiziert und die Payload Daten verwendet. Kein Problem.
Das JWT Serviceprogramm kann auch benutzt werden ohne direkt das ILEastic Framework zu benutzen.
ILEastic : https://github.com/sitemule/ILEastic
API Dokumenation siehe ILEDocs unter http://iledocs.rpgnextgen.com Projekt ILEastic.
JWT ist im plugins Ordner zu finden.
Mit dem Serviceprogramm kann man übrigens auch auf sehr einfache Weise einen OAuth 2.0 Provider selber schreiben. Grant Type : Client Credentials ist sehr einfach umzusetzen. Kaum mehr Aufwand als Basic Auth.
Schöne Grüße
Mihael
dschroeder
10-08-20, 14:22
Vielen Dank Mihael,
ich werde mir das ansehen.
Viele Grüße
Dieter
Im Moment funktioniert das Bauen des ILEastic Projekt nicht out-of-the-box. Wenn du das angehen willst, dann schreib mir einfach ( mihael at rpgnextgen dot com ).
dschroeder
10-08-20, 15:15
ok, vielen Dank!
Dieter
Rainer Ross
04-11-21, 18:50
Hallo Dieter,
inzwischen habe ich bei einem Kunden einen Webservice mit OAuth2.0 Authentifizierung implementiert.
Das geht über 2 HTTP-Requests: 1. Den Token holen und dann 2. mit dem Token auf den Webservice zugreifen.
Die HTTP-Requests kann man mit SYSTOOLS.HTTPPOSTCLOB oder jetzt mit dem neuen Technologie-Refresh (jetzt ohne JAVA im Untergrund und erheblich schneller) den Request mit QSYS2.HTTP_GET oder QSYS2.HTTP_POST machen.