API-Schlüssel-Authentifizierung
Die API-Key-Authentifizierung ist eine der einfachsten Methoden, um Drupal REST-APIs zu schützen. Sobald Sie API-Keys für alle Ihre Benutzer generiert haben, können Sie diese Schlüssel verwenden, um den Zugriff auf Ihre Drupal REST-APIs abzusichern.
Sie können dies tun, indem Sie bei jeder API-Anfrage den Drupal-Benutzernamen und den API-Key des Benutzers im Authorization-Header mitsenden. Das Drupal API Authentication-Modul authentifiziert die Anfrage dann auf Grundlage des Benutzernamens und des zugehörigen API-Keys. Dieses Modul ist kompatibel mit Drupal 7, Drupal 8, Drupal 9, Drupal 10 und Drupal 11.
Einrichtungsvideo:
Voraussetzungen: Download und Installation:
- Laden Sie das Drupal REST & JSON API Authentication-Modul herunter und installieren Sie es.
- REST UI: Dieses Modul stellt eine Benutzeroberfläche zur Konfiguration des REST-Moduls bereit.
- Aktivieren Sie die folgenden Webservice-Module im Abschnitt „Erweitern“ (/admin/modules) Ihrer Drupal-Seite:
- REST UI
- RESTful Web Services
- Serialization
Schritte zur Einrichtung der API-Key-basierten Authentifizierung in Drupal:
- Zum besseren Verständnis nehmen wir als Beispiel die API-Key-basierte Authentifizierung für die Create User API von Drupal.
- Bitte beachten Sie, dass die /entity/user-API von Drupal verwendet wird, um einen Benutzer in Drupal zu erstellen.
API aktivieren und Methoden/Operationen zuweisen:
- Im ersten Schritt muss die API aktiviert und die erlaubten Methoden und Operationen zugewiesen werden. Dies kann über das REST UI-Modul oder durch direkte Konfigurationsanpassung erfolgen.
- 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 muss die /entity/user-API aktiviert werden. Aktivieren Sie diese API über die Option „Enable“ davor.
- Da unser Ziel das Erstellen eines Benutzers in Drupal ist, wählen Sie folgende Einstellungen:
- Methode: POST
- Format: json
- Authentifizierungsanbieter: rest_api_authentication.
- Die Auswahl von rest_api_authentication ermöglicht es dem miniOrange REST API Authentication-Modul, Ihre /entity/user-API zu authentifizieren. Klicken Sie auf die Schaltfläche Konfiguration speichern, um fortzufahren.
API-Key Benutzerfeld in Drupal erstellen:
Hinweis: Wenn Sie die kostenlose Version des Moduls verwenden, können Sie diesen Schritt überspringen.
In diesem Schritt legen wir fest, wie der API-Key zur Authentifizierung der API-Aufrufe genutzt wird. Dazu müssen wir zunächst ein Benutzerattributfeld zum Speichern eines API-Keys anlegen.
- Gehen Sie zum Tab „Felder verwalten“ (/admin/config/people/accounts/fields) in Drupal.
- Klicken Sie auf die Schaltfläche Feld hinzufügen, um das Feld zu erstellen.
- Wählen Sie im Dropdown Neues Feld hinzufügen die Option Text (Plain) und geben Sie API Key im Beschriftungsfeld ein. Klicken Sie dann auf Speichern und fortfahren, um die Einstellungen zu sichern.
- Stellen Sie sicher, dass der Maschinenname des Benutzerattributs field_api_key lautet.
- Klicken Sie nun auf Feldeinstellungen speichern und danach auf Einstellungen speichern, um die Felderstellung abzuschließen.
- Sie sehen nun ein zusätzliches API-Key Textfeld im Benutzerprofil.
API-Key-basierte Authentifizierung einrichten:
- In diesem Schritt generieren wir einen API-Key. Gehen Sie dazu in den 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.
- Um die API-Key-basierte Authentifizierung zu aktivieren, wählen Sie die Option API Key.
- Auf demselben Bildschirm können Sie einen API-Key für einen bestimmten Benutzer oder für alle Benutzer gleichzeitig generieren.
- Jetzt werden wir den API-Key nur für einen einzelnen Benutzer generieren.
- Geben Sie im Textfeld Benutzername eingeben den Benutzernamen ein, für den Sie einen API-Key generieren möchten, und klicken Sie auf API-Key für diesen Benutzer generieren.
- Sie können nun den generierten API-Key im API-Key-Feld Ihres Benutzerprofils einsehen.
- Bewahren Sie den API-Key gut auf, da Sie ihn später für die Authentifizierung der API benötigen.
Drupal-Rollen die Berechtigung zum Benutzererstellen geben:
- Sie können auch Nicht-Admin-Rollen die Berechtigung zum Erstellen von Benutzern in Drupal geben. Weisen Sie dazu der gewünschten Drupal-Rolle die Berechtigung Benutzer verwalten unter dem Bereich Berechtigungen (/admin/people/permissions) Ihrer Drupal-Seite zu.
Das war’s!!!
- Jetzt können wir versuchen, einen Benutzer in Drupal über einen API-Call mit API-Key-Authentifizierung zu erstellen.
Beispiel:
- Um einen Benutzer in Drupal zu erstellen, müssen Sie eine POST-Anfrage zusammen mit dem Benutzernamen und dem vom miniOrange REST API Authentication-Modul ausgestellten API-Key stellen. Der Wert von Benutzername und API-Key muss base64-kodiert sein. Siehe unten das Format für eine Anfrage.
Anfrage: POST <your_drupal_base_url>/entity/user?_format=json
Header: Authorization: Basic base64encoded <username:api_key>
Accept: application/json
Content-Type: application/jsonBody:
{
"name": [
{"value": "<username>"}
],
"mail": [
{"value": "<email>"}
],
"pass":[
{"value": "<password>"}
],
"status":[
{"value": "1"}
]
}CURL-Anfrageformat-
curl --location --request POST ‘<your_drupal_base_url>/entity/user?_format=json' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic base64encoded<username:API key>’ \
--data-raw '{
"name": [
{"value": "Username"}
],
"mail": [
{"value": "email"}
],
"pass":[
{"value": "Password"}
],
"status":[
{"value": "1"}
]
}'
- Sie können sich auch das Bild der Postman-Anfrage unten ansehen:
- Eine erfolgreiche Antwort gibt die Benutzerdaten zurück, die Sie erstellt haben. (Siehe Bild unten)
- Falls Sie einen Fehler in der Antwort erhalten, können Sie die folgende Tabelle für die Fehlerbeschreibung und mögliche Lösungen nutzen.
Fehlerantwort:
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 den Authorization Header senden, aber im falschen Format. Beispiel: { "status": "error", "error": "INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE", "error_description": "Authorization header must be the type of Basic Authentication." } |
USER_DOES_NOT_EXIST |
Sie erhalten diesen Fehler, wenn das Modul keinen Account zum Benutzernamen in der Anfrage findet. Beispiel: |
INVALID_API_KEY |
Sie erhalten diesen Fehler, wenn der in der API-Anfrage gesendete API-Key nicht übereinstimmt. Beispiel: |
USER_NAME_MISSING |
Sie erhalten diesen Fehler, wenn das Modul den Benutzernamen in der API-Anfrage nicht findet. Beispiel: |
INVALID_AUTHORIZATION_HEADER |
Sie erhalten diesen Fehler, wenn das Modul den Header nicht korrekt dekodieren kann oder Benutzername und API-Key im Header fehlen. Beispiel: |
Artikel aus der Drupal Dokumentation.