JWT-Authentifizierung
Das Drupal API Authentication-Modul funktioniert, indem es zusammen mit Ihren API-Anfragen ein JWT-Token zur Authentifizierung sendet. Dieses Modul verwendet JSON Web Token (JWT), einen offenen Standard zur sicheren Darstellung der Benutzeridentität bei Interaktionen zwischen zwei Parteien.
In diesem Schritt werden im Wesentlichen ein Benutzername und Passwort Ihrer Drupal-Seite verwendet, um zunächst ein JWT-Token zu erhalten. Sobald Benutzername und Passwort verifiziert wurden, erstellt das Drupal REST API Authentication-Modul ein signiertes JSON Web Token. Die API gibt dieses Token anschließend an die Client-Anwendung zurück.
Sobald Sie das JWT-Token erhalten haben, können Sie dieses Token für Operationen in Drupal verwenden, bis das JWT-Token abläuft. Das Drupal REST API Authentication-Modul gewährt den Zugriff nur, wenn ein gültiges JWT von der Anwendung empfangen wird.
JWT kann mit zwei Algorithmen signiert und validiert werden – HSA und RSA.
Sehen wir uns an, wie ein JWT-Token zur API-Authentifizierung in Drupal verwendet werden kann.
Einrichtungsvideo:
Voraussetzungen: Download und Installation:
- Laden Sie das Drupal REST & JSON API Authentication-Modul herunter und installieren Sie es.
- REST UI: Dieses Modul bietet eine Benutzeroberfläche für die Konfiguration des REST-Moduls.
- Aktivieren Sie die folgenden Webservices-Module im Bereich „Erweitern“ (/admin/modules) Ihrer Drupal-Seite:
- REST UI
- RESTful Web Services
- Serialization
Schritte zur Konfiguration der JWT-basierten API-Authentifizierung:
- Für ein besseres Verständnis nehmen wir als Beispiel die Hinzufügung der JWT-basierten Authentifizierung zur Erstellung einer Basic Page in Drupal mit der /node-API.
API aktivieren und Methoden/Operationen wie folgt zuweisen:
- Im ersten Schritt muss die API aktiviert und die erlaubten Methoden und Operationen zugewiesen werden. Dies kann mit dem REST UI-Modul erfolgen oder indem Sie die Konfiguration direkt bearbeiten.
- Um die API über das REST UI-Modul zu aktivieren, klicken Sie auf die Schaltfläche Konfigurieren des REST UI-Moduls (siehe unten).
- In unserem Beispiel wollen wir die /node-API im Inhaltsbereich aktivieren. Aktivieren Sie diese API mit der Option „Aktivieren“ davor.
- Da unser Ziel darin besteht, eine Basic Page in Drupal zu erstellen, wählen Sie folgende Konfigurationen:
- Methode: POST
- Format: json
- Authentifizierungsanbieter: rest_api_authentication.
- Mit der Auswahl von rest_api_authentication können Sie das miniOrange REST API Authentication-Modul zur Authentifizierung Ihrer API verwenden. Klicken Sie auf die Schaltfläche Konfiguration speichern, um fortzufahren.
JWT-basierte API-Authentifizierung einrichten:
-
In diesem Schritt richten wir JWT als API-Authentifizierungsmethode ein. Gehen Sie dazu zum Tab API Authentication des REST API Authentication-Moduls (/admin/config/people/rest_api_authentication/auth_settings).
- Wählen Sie das Kontrollkästchen Authentifizierung aktivieren und klicken Sie auf „Einstellungen speichern“.
- Unter der Schaltfläche „Einstellungen speichern“ wählen Sie die Option JWT.
-
Falls Sie ein extern erstelltes JWT-Token zur Authentifizierung verwenden möchten, können Sie dies mit folgenden Optionen tun:
- Geben Sie im Feld Username Attribute den Attributnamen an, unter dem Ihr Benutzername empfangen wird.
- Wenn Sie ein externes JWT-Token verwenden, können Sie auch die JWKS-URI angeben, um das JWT-Token in Drupal zu validieren.
Drupal-Rollen Berechtigung zum Erstellen einer Seite erteilen:
-
Sie können auch Nicht-Admin-Rollen die Berechtigung erteilen, eine Basic Page zu erstellen. Weisen Sie dazu der gewünschten Drupal-Rolle die Berechtigung Basic page: Neue Inhalte erstellen unter dem Bereich „Berechtigungen“ (/admin/people/permissions) Ihrer Drupal-Seite zu.
Das war’s!!!
Jetzt können wir versuchen, eine Basic Page über einen API-Call mit JWT-Authentifizierung zu erstellen.
Beispiele:
-
Zuerst müssen wir einen API-Call machen, um ein JWT zu erhalten. Anschließend wird dieses Token verwendet, um die Drupal API zur Erstellung einer Basic Page zu authentifizieren.
-
Wir können das JWT erhalten, indem wir eine POST-Anfrage mit dem Drupal-Benutzernamen und -Passwort senden. Die Zugangsdaten müssen base64-kodiert übermittelt werden. Siehe das untenstehende Anfrageformat.
Anfrage: POST <your_drupal_base_url>/rest_api/id_token
Header: Authorization: Basic base64encoded <username:password;>
Accept: application/jsonCURL-Anfrageformat-
curl --location --request POST ' <your_drupal_base_url>/rest_api/id_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic base64encoded <username:password>'
-
Sie können auch das Bild der Postman-Anfrage zur JWT-Anforderung in Drupal einsehen.
Anfrage:
-
Eine erfolgreiche Antwort gibt das JWT zusammen mit seinem Ablaufdatum zurück. (Siehe Bild unten)
-
Falls Sie einen Fehler als Antwort erhalten, können Sie die folgende Tabelle zur Fehlerbeschreibung und zu möglichen Lösungen verwenden.
Fehler | Beschreibung |
INVALID_CREDENTIALS |
Sie erhalten diesen Fehler, wenn entweder der Benutzername oder das Passwort falsch ist. Beispiel: |
Drupal REST APIs mit erhaltenem JWT authentifizieren:
- Um die Authentifizierung mit JWT durchzuführen, fügen Sie das erhaltene JWT als Bearer-Token im Authorization Header hinzu.
Anfrage: POST <drupal_base_url> /node?_format=json
Header: Authorization: Bearer received_JWT
Accept: application/json
Body:
{
"type":[
{"target_id":"page"}
],
"title":[
{"value":"Drupal Rest API Authentication"}
],
"body":[
{"value":"Page created using the JWT Authentication."}
]
}CURL-Anfrageformat-
curl --location --request POST ‘<drupal_base_url>/node?_format=json’\
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <received_JWT>’ \
--data-raw '{
"type":[
{"target_id":"page"}
],
"title":[
{"value":"Drupal Rest API Authentication"}
],
"body":[
{"value":"Page created using the JWT Authentication."}
]
}'
Beispielanfrage zur Seitenerstellung mit JWT-basierter Authentifizierung:
- Sie können auch die entsprechende Postman-Anfrage dazu ansehen:
- Eine erfolgreiche Antwort sieht zum Beispiel so aus:
- Sie können die erstellte Seite im Inhalt-Tab von Drupal überprüfen.
-
Fehlerantworten und mögliche Lösungen:
Fehler | Beschreibung |
MISSING_AUTHORIZATION_HEADER |
Sie erhalten diesen Fehler, wenn Sie keinen Authorization Header in der API-Anfrage senden oder wenn dieser aus irgendeinem Grund vom Server entfernt wurde. Beispiel: |
INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE |
Sie erhalten diesen Fehler, wenn Sie zwar den Authorization Header senden, aber der Token-Typ nicht Bearer ist. Beispiel: |
TOKEN_EXPIRED |
Sie erhalten diesen Fehler, wenn das Access Token abgelaufen ist. Beispiel: |
USER_INFORMATION_NOT_FOUND |
Sie erhalten diesen Fehler beim Versuch, die Benutzerinformationen abzurufen. Beispiel: |
INVALID_SIGNATURE |
Sie erhalten diesen Fehler, wenn die Token-Signatur ungültig ist. Beispiel: |
Artikel aus der Drupal Dokumentation.