Authentifizierung

Um die REST API nutzen zu können, muss man sich erst einmal authentifizieren. Das geschieht im Beispiel rechts in Echtzeit und auf Basis des modernen Web Standards JWT (JSON Web Token). Bei der Eingabe einer korrekten Kombination aus Benutzer und Passwort generiert uns die API hier ein JSON Web Token (auch Bearer Token), welches für einen bestimmten Zeitraum gültig ist. Bei allen folgenden API-Aufrufen wird dieses Token mitgegeben und vom Server verifiziert. 

Bearer Tokens / JSON Web Tokens sind insbesondere in einer Konstellation von mehreren APIs / Microservices interessant, da das Token mit Hilfe eines geteilten Geheimschlüssel von jedem Server unabhänging verifiziert werden kann. Das führt zu einer enormen Entlastung des Authentifizierungs-Servers, welcher leistungstechnisch oftmals einen Flaschenhals darstellt, wenn bei jedem API-Aufruf die Zugangsdaten übermittelt und überprüft werden müssen.



API-Aufruf

Nach der erfolgreichen Authentifizierung kann nun ein richtiger API-Aufruf ausgeführt werden. Mit Klick auf den Button rechts wird der darüber ausgegebene Code ausgeführt und der Rückgabe-Wert der API in das Textfeld unterhalb geschrieben. Das Bearer Token wird dabei aus dem Feld "Bearer Token" oberhalb entnommen, dementsprechend kommt es zu einem Fehler, wenn das darin stehende Token verändert wird. Wenn Sie das Token bereits verändert haben, können Sie mit erneutem Klick auf den "Authentifizieren"-Button ein neues generieren.

Ist das Token im korrekten Format und gültig, gibt uns die API die gewünschten Demo-Daten zurück.

// init request
var request = new XMLHttpRequest();
var data = new FormData();

//fetch the user credentials from the input
var user = document.querySelector('#sg-rest-demo-user').value;
var pass = document.querySelector('#sg-rest-demo-pass').value;

// set user credentials to data
data.append('user', user);
data.append('pass', pass);

// do something after the request executed
request.onreadystatechange = function() {

   // on success
   if (request.readyState === 4 && request.status === 200) {

      var result = JSON.parse(request.responseText);

      var resultString = JSON.stringify(result, null, 4);
      document.getElementById('sg-rest-demo-token-result').value = resultString;

      var bearerToken = result['bearerToken'];
      document.getElementById('sg-rest-demo-token').value = bearerToken;
   }

   // on error
   if (request.readyState === 4 && request.status === 500) {
      var resultString = '{\n error: "Authentication failed." \n }';
      document.getElementById('sg-rest-demo-token-result').value = resultString;
   }
}

// send request
request.open("POST", '/?type=1595576052&tx_sgrest[request]=authentication/authentication/getBearerToken&logintype=login', true);
request.send(data);