OBS/Kostenpflichtige Module/RESTServer/Beispiel1
Zur Navigation springen
Zur Suche springen
Internet-Shop
Der modified ECommerce Shop
Shop-Menü
- A Preise aktualisieren
- C Personen übertragen
- E Kategorien verwalten
- G Kataloge verwalten
- I Merkliste übertragen
- K Varianten übertragen
- L Artikelvarianten übertragen
- M Referenzarten übertragen
- N Lagerbestände verwalten
- U Bestellungen einlesen
- V leere Passworte füllen
- W Update-Informationen zurücksetzen
- X Konfiguration
- Z Protokoll
Automatische Vorgänge
Preislisten
ZUGFeRD
Factoring
UPS
IMS Professional
SMS
Mehrlager-Verwaltung
Mehrsprachen Modul
Multilanguage Modul
Einfache Produktionsnachverfolgung
DMS - Dokumenten Management System
DMS Dokumente
Tasten und Schaltflächen
F10 Weit.
QR Zeiterfassung
EVA Marketing Tool
Technikersteuerung
Termin-Projekte
Edifact-Schnittstelle
Backup Überwachung Email
Anlagenbuchhaltung
OBS Geo Daten
DeliSprint / DPD
Filialen
Auto-Waagen
Cashback
Moebelschnittstelle
Tourenplanung
Dokumenten Manager
DocuWare-Schnittstelle
OFML-Kalkulation
Pascom
Versicherungsschaden
Gutschriftsanzeigen
OCPP Ladestationen
Kameraverwaltung
DataInOut
REST-Schnittstelle
Sammelverträge
Craftboxx
OpenMasterData / IDS
Sammelpositionen
Beispiel 1: Daten-Abruf mit JWT-Authentifizierung
In diesem Beispiel werden Steuerungs-Variablen aus OBS abgerufen und auf einer Webseite ausgegeben. Der Zugang ist mit JWT-Pflicht eingerichtet, der Konsument muss sich daher zuerst anmelden und einen Token bezogen haben.
Einrichtung in OBS
- Server-Profil: Standard-TLS-Profil Public-API mit Bindung 0.0.0.0:443
- Zugang: Web-Dashboard
- API-Key: zufaellig generiert
- JWT aktiv, JWT-Endpunkt oauth, JWT-Key zufaellig, JWT-Exp 60 (Minuten)
- CORS-Origins: https://dashboard.kunde.de
- Endpunkt: steuerung/v1, dem Profil Public-API zugeordnet
- Berechtigung: Zugang Web-Dashboard fuer Endpunkt steuerung/v1 freigeschaltet
JWT-Authentifizierungs-Skript (Zugang)
Wird ueber die Zugaenge-Liste mit F7 geoeffnet. Pruefen, ob Benutzername/Passwort gegen die OBS-Benutzerverwaltung passen.
function Authenticate(oParams: TStrings; oBody: TJSONObject): string;
var oRes : TJSONObject;
cUser : string;
cPass : string;
cSql : string;
qUser : TxFQuery;
begin
oRes := TJSONObject.Create();
try
cUser := '';
cPass := '';
if (Assigned(oBody)) then begin
oVal := oBody.GetValue('username');
if (Assigned(oVal)) then begin
cUser := oVal.Value;
end;
oVal := oBody.GetValue('password');
if (Assigned(oVal)) then begin
cPass := oVal.Value;
end;
end;
cSql := 'SELECT u_nr, u_name FROM benutzer' +
' WHERE u_login = ' + DB_SQLVal(cUser) +
' AND u_passwort_hash = ' + DB_SQLVal(HashPasswort(cPass)) +
' AND u_aktiv = "1"';
if (DB_SOpen('Y00CXXXXAA', oDB, cSql, qUser)) then begin
oRes.AddPair('status' , 1);
oRes.AddPair('_OBS_JWT_ID' , qUser.A2C('u_nr'));
oRes.AddPair('_OBS_JWT_SUBJECT' , qUser.A2C('u_name'));
oRes.AddPair('_OBS_JWT_AUDIENCE', 'dashboard');
end else begin
oRes.AddPair('status', 9);
oRes.AddPair('error' , 'Login fehlgeschlagen');
end;
DB_Close(qUser);
result := oRes.ToJSON();
finally
MyFreeAndNil(oRes);
end;
end;
Endpunkt-Skript steuerung/v1
Liefert eine Liste von Steuerungs-Werten zurueck. Die Auswertung der JWT-Claims sorgt dafuer, dass nur Audience dashboard Daten erhaelt.
procedure _AddVar(oArr: TJSONArray; const cVar: string);
var oWert : TJSONObject;
cTitel : string;
cData : string;
cEinh : string;
lString: Boolean;
lAlign : Boolean;
begin
if (ST_Variable(oDB, cVar, cTitel, cData, cEinh, lString, lAlign)) then begin
oWert := TJSONObject.Create();
oWert.AddPair('variable', cVar);
oWert.AddPair('titel' , cTitel);
oWert.AddPair('wert' , cData);
oWert.AddPair('einheit' , cEinh);
oArr.Add(oWert);
end;
end;
//------------------------------------------------------------------------------
function Get(oParams: TStrings; oBody: TJSONObject): string;
var oArr: TJSONArray;
begin
// Audience-Pruefung: nur Dashboard-Tokens akzeptieren
if (oParams.Values['_OBS_JWT_AUDIENCE'] <> 'dashboard') then begin
result := '{"error":"audience not allowed"}';
exit;
end;
oArr := TJSONArray.Create();
try
_AddVar(oArr, 'WERT_1');
_AddVar(oArr, 'WERT_2');
_AddVar(oArr, 'WERT_3');
_AddVar(oArr, 'WERT_4');
result := oArr.ToJSON();
finally
MyFreeAndNil(oArr);
end;
end;
JavaScript-Client (Browser)
Im Browser werden zwei Aufrufe gemacht: erst Token holen, dann Daten lesen.
const API_BASE = 'https://api.meinserver.de';
const API_KEY = '[API-KEY]';
async function login(username, password) {
const res = await fetch(`${API_BASE}/oauth/`, {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'apikey': API_KEY },
body: JSON.stringify({ username, password })
});
if (!res.ok) throw new Error('Login fehlgeschlagen');
const data = await res.json();
return data.token;
}
async function ladeSteuerung(token) {
const res = await fetch(`${API_BASE}/steuerung/v1`, {
method: 'GET',
headers: {
'apikey': API_KEY,
'Authorization': 'Bearer ' + token
}
});
if (!res.ok) throw new Error('Abruf fehlgeschlagen: ' + res.status);
return res.json();
}
async function zeigeTabelle() {
const token = await login('mitarbeiter', 'geheim');
const werte = await ladeSteuerung(token);
const tbl = document.getElementById('steuerung');
werte.forEach(w => {
const tr = document.createElement('tr');
tr.innerHTML = `<td>${w.titel}</td><td>${w.wert} ${w.einheit}</td>`;
tbl.appendChild(tr);
});
}
zeigeTabelle();
Test mit curl
Token holen:
curl -X POST -H "apikey: [API-KEY]" -H "Content-Type: application/json" ^
-d "{\"username\":\"mitarbeiter\",\"password\":\"geheim\"}" ^
https://api.meinserver.de/oauth/
Antwort:
{"token":"eyJhbGciOi..."}
Daten abrufen:
curl -H "apikey: [API-KEY]" -H "Authorization: Bearer eyJhbGciOi..." ^
https://api.meinserver.de/steuerung/v1
Was zeigt das Beispiel?
- Zweistufige Anmeldung: API-Key + JWT.
- Sichere Trennung von Konsumenten-Gruppen ueber die Audience-Claim.
- Eigenes Authentifizierungs-Skript pro Zugang.
- Browser-Zugriff ueber CORS-erlaubtes Origin.