JSON Web Tokens (JWT)

Die REST API enthält ein Plugin, welches es erlaubt, JSON Web Tokens auszustellen.

Token-basierte Authentisierung ist besonders dazu geeignet, um andere Applikationen an die API anzubinden, da vermieden werden kann, in der Applikation die Zugangsdaten eines Benutzers hinterlegen zu müssen.

Ausstellen

Ein Token kann ausgestellt werden durch einen POST Request auf den @login endpoint. Im Body des Requests müssen die Zugangsdaten des Benutzers, für den das Token ausgestellt werden soll, enthalten sein:

POST /@login HTTP/1.1
Accept: application/json
Content-Type: application/json

{
    "login": "admin",
    "password": "admin"
}

Der Server antwortet mit einem JSON-Objekt welches das Token enthält:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmdWxsbmFtZSI6IiIsInN1YiI6ImFkbWluIn0.SZDnl_baH5M_StJJrzfbj7o-5My30NmSFbMrhpSX5I4"
}

Verwenden

Das Token kann jetzt für alle folgenden Requests zur Authentisierung verwendet werden. Dazu muss ein Authorization Header mit der Authentisierungsmethode Bearer und dem Token gesetzt werden:

GET /Plone HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmdWxsbmFtZSI6IiIsInN1YiI6ImFkbWluIiwiZXhwIjoxNDY0MDQyMTAzfQ.aOyvMwdcIMV6pzC0GYQ3ZMdGaHR1_W7DxT0W0ok4FxI
Accept: application/json

Erneuern

Standardmässig läuft das Token nach 12 Stunden ab, und muss daher vor Ablauf erneuert werden. Um das Token zu erneuern kann ein POST Request auf den @login-renew Endpoint gemacht werden:

POST /@login-renew HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmdWxsbmFtZSI6IiIsInN1YiI6ImFkbWluIiwiZXhwIjoxNDY0MDQyMTAzfQ.aOyvMwdcIMV6pzC0GYQ3ZMdGaHR1_W7DxT0W0ok4FxI
Accept: application/json

Der Server antwortet mit einem JSON-Objekt welches das neue Token enthält:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmdWxsbmFtZSI6IiIsInN1YiI6ImFkbWluIn0.SZDnl_baH5M_StJJrzfbj7o-5My30NmSFbMrhpSX5I4"
}

Invalidieren

Der @logout endpoint kann verwendet werden, um ein Token zu invalidieren. Dazu müssen die Tokens jedoch server-seitig persistiert werden.

In der Standardkonfiguration werden Tokens nicht persistiert, und können daher nicht aktiv invalidiert werden. Wenn sie Bedarf danach haben, aktiv invalidierbare Tokens auszustellen, können wir dies für Sie konfigurieren.

Der Logout-Request kann dann durchgeführt werden, indem das existierende Token im Authorization Header angegeben wird:

POST /@logout HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmdWxsbmFtZSI6IiIsInN1YiI6ImFkbWluIiwiZXhwIjoxNDY0MDQyMTAzfQ.aOyvMwdcIMV6pzC0GYQ3ZMdGaHR1_W7DxT0W0ok4FxI
Accept: application/json

Wenn die Invalidierung erfolgreich war, antwortet der Server mit einer leeren 204 Response:

HTTP/1.1 204 No Content