Zugriffstoken / OAuth-basierte Authentifizierung einrichten
OAuth (Open Authorization) ist ein offener Standard für ein tokenbasiertes Authentifizierungs- und Autorisierungsprotokoll, das für Single Sign-On (SSO) verwendet werden kann. OAuth ermöglicht es, bestimmte Informationen über das Konto eines Endbenutzers von Drittanbieterdiensten wie Facebook usw. zu verwenden, ohne das Benutzerpasswort offenzulegen. Es fungiert als Vermittler im Namen des Endbenutzers und stellt dem Dienst ein Zugriffstoken zur Verfügung, das die Freigabe spezifischer Kontoinformationen autorisiert.
Diese Drupal-API-Authentifizierungsmethode verwendet das OAuth 2.0-Protokoll, um ein Sicherheitszugriffstoken zu erhalten. Dieses Token wird verwendet, um den Zugriff auf Ihre Drupal-API zu authentifizieren. Die OAuth-Methode liefert ein stark verschlüsseltes und sicheres Zugriffstoken und sorgt dafür, dass Ihre Drupal-APIs bestens geschützt sind. Sie gilt als eine der sichersten Methoden, um unbefugten Zugriff auf Ihre Drupal REST- oder JSONAPI-Endpunkte zu verhindern. Dieses Modul ist kompatibel mit Drupal 7, Drupal 8, Drupal 9, Drupal 10 und Drupal 11.
Einrichtungsvideo:
Bei OAuth 2.0 sind die folgenden drei Parteien beteiligt:
- Der Benutzer besitzt Daten, auf die über die API zugegriffen wird, und möchte der Anwendung Zugriff gewähren.
- Die Anwendung möchte im Namen des Benutzers über die API auf die Daten zugreifen.
- Der API-Endpunkt steuert und ermöglicht den Zugriff auf die Benutzerdaten.
Die API gewährt den Zugriff nur, wenn sie ein gültiges Zugriffstoken von der Anwendung erhält. Wie die Anwendung ein Zugriffstoken erhält, hängt vom verwendeten OAuth-Schema ab.
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 zur Konfiguration des REST-Moduls.
- Aktivieren Sie die folgenden Webservice-Module im Bereich „Erweitern“ (/admin/modules) Ihrer Drupal-Seite:
- JSON: API
- REST UI
- RESTful Web Services
- Serialization
Schritte zur Konfiguration der OAuth/Access Token-basierten API-Authentifizierung:
- Für ein besseres Verständnis nehmen wir als Beispiel die Hinzufügung der OAuth/Access Token-basierten Authentifizierung zur „Get User Information“-API für Drupal.
- Bitte beachten Sie, dass die „Get User Information“-API von Drupal verwendet wird, um Benutzerinformationen abzurufen.
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 möchten wir die /user/{user}-API im Bereich Inhalt aktivieren. Aktivieren Sie diese API mit der Option Aktivieren davor.
- Da unser Ziel darin besteht, die Benutzerinformationen abzurufen, wählen Sie folgende Konfigurationen:
- Methode: GET
- Format: json
- Authentifizierungsanbieter: rest_api_authentication.
- Damit kann das miniOrange REST API Authentication-Modul Ihre API authentifizieren. Klicken Sie auf die Schaltfläche Konfiguration speichern, um fortzufahren.
OAuth/Access Token-basierte API-Authentifizierung einrichten:
- In diesem Schritt richten wir OAuth/Access Token als API-Authentifizierungsmethode ein. Navigieren 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 die Schaltfläche Einstellungen speichern.
- Unter der Schaltfläche „Einstellungen speichern“ wählen Sie die Option OAuth/Access Token.
- Klicken Sie nun auf die Schaltfläche Generate a new Client ID & Secret.
- Notieren Sie sich die Client-ID und das Secret, da Sie diese später zur Authentifizierung der Get User Info API benötigen.
Drupal-Rollen Berechtigung zum Anzeigen von Benutzerinformationen erteilen:
- Sie können auch Nicht-Admin-Rollen die Berechtigung erteilen, Benutzerinformationen anzuzeigen. Weisen Sie dazu der gewünschten Drupal-Rolle die Berechtigung Benutzerinformationen anzeigen unter dem Bereich „Berechtigungen“ (/admin/people/permissions) Ihrer Drupal-Seite zu.
Das war’s!!!
Jetzt können wir versuchen, Benutzerinformationen über einen API-Call mit OAuth/Access Token-Authentifizierung abzurufen.
Beispiele:
- Zuerst müssen wir einen API-Call machen, um ein Zugriffstoken zu erhalten. Anschließend wird dieses Token verwendet, um die Drupal API für den Abruf von Benutzerinformationen zu authentifizieren.
- Das miniOrange API Authentication-Modul unterstützt zwei Grant-Typen, mit denen Sie ein Zugriffstoken erhalten können:
Password Grant:
- Beim Password Grant erhalten Sie das Zugriffstoken durch eine POST-Anfrage mit dem Drupal-Benutzernamen und -Passwort sowie der Client-ID, die vom REST API Authentication-Modul ausgegeben wurde.
Anfrage: POST <drupal_base_url>/rest_api/access_token
Body:
grant_type = password
username = <drupal_username>
password = <drupal_password>
client_id = <client_id>
Anfrage im CURL-Format-
curl --location --request POST '<your_drupal_base_url>/rest_api/access_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'client_id= <drupal_client_id>' \
--data-urlencode 'username=<drupal_username >\
--data-urlencode 'password=<drupal_password>'
- Sie können sich auch das Bild der Postman-Anfrage unten ansehen:
Client Credentials Grant:
- Beim Client Credentials Grant erhalten Sie das Zugriffstoken durch eine POST-Anfrage mit der Client-ID und dem Client-Secret, die vom API Authentication-Modul ausgegeben wurden, zusammen mit dem Drupal-Benutzernamen.
Anfrage: POST <drupal_base_url>/rest_api/access_token
Body:
grant_type = client_credentials
client_id = <client_id>
client_secret = <client_secret>
Username = <drupal_username>
CURL-Anfrageformat-
curl --location --request POST '<drupal_base_url>/rest_api/access_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=<Client_ID>' \
--data-urlencode 'username=<drupal_username>' \
--data-urlencode 'client_secret=<Client_secret>'
- Sie können sich auch das Bild der Postman-Anfrage zur Token-Anforderung über Client Credentials ansehen.
- Eine erfolgreiche Antwort gibt das Zugriffstoken zusammen mit Ablaufdatum und Typ des Tokens zurück (siehe Bild unten):
Fehlerantwort:
Fehler | Beschreibung |
INVALID_CREDENTIALS |
Sie erhalten diesen Fehler, wenn entweder der Benutzername oder das Passwort falsch ist. Beispiel: |
INVALID_CLIENT_ID |
Sie erhalten diesen Fehler, wenn Sie eine falsche Client-ID senden. Beispiel: |
INVALID_CLIENT_SECRET |
Sie erhalten diesen Fehler, wenn Sie ein falsches Client Secret senden. Beispiel: |
MISSING_USERNAME |
Sie erhalten diesen Fehler, wenn Sie einen erforderlichen Parameter in der Anfrage vergessen haben. Beispiel: |
Artikel aus der Drupal Dokumentation.