So richten Sie die OAuth-Authentifizierung mit der WP-REST-API ein und verwenden sie

Veröffentlicht: 2016-11-30
WordPress Rest API einrichten
Folgen Sie @Cloudways

Wenn es um die WordPress REST API geht, ist OAuth der gebräuchlichste Anbieter für die Authentifizierungsbehandlung.

Wenn die OAuth-Authentifizierung vorhanden ist, melden sich Benutzer zuerst über das WordPress-Anmeldeformular an, das auf der Website verwendet wird. Diese Anmeldung autorisiert die Clients jedoch auch, Anfragen in ihrem Namen zu bearbeiten, und alle nachfolgenden Anfragen werden durch OAuth-Token validiert. Diese Token werden auch verwendet, um alle API-Zugriffsanforderungen zu verwalten. Dieser Zugriff kann jederzeit widerrufen werden.

Die vielleicht wichtigste Verwendung des OAuth-Authentifizierungsprozesses ist der sichere Prozess der Verarbeitung von REST-API-Anfragen, ohne die Anmeldeinformationen der Benutzer preiszugeben. Dies ist insbesondere bei Produktionsservern wichtig, bei denen häufig Anmeldeinformationen ausgetauscht werden. In solchen Szenarien wird die OAuth-Authentifizierung verwendet, um ein sicheres Verfahren für die Verarbeitung häufiger Anforderungen an Anmeldeinformationen bereitzustellen.

  • Traditionelle versus OAuth-Authentifizierung
  • OAuth-Authentifizierungsworkflow
  • Installation der OAuth-Authentifizierung
  • Bewertung der Verfügbarkeit der OAuth-API
  • Anwendungen erstellen und verwalten
  • Client-CLI zum Generieren von OAuth-Anmeldeinformationen
  • HTTP-Client zum Generieren von OAuth-Anmeldeinformationen
  • Erwerb temporärer Anmeldeinformationen
  • Benutzerberechtigung
  • Token-Austausch
  • Senden einer authentifizierten Testanforderung

Traditionelle versus OAuth-Authentifizierung

Um die Bedeutung der OAuth-Authentifizierung zu verstehen, ist es wichtig, das traditionelle und das OAuth-Authentifizierungsmodell zu verstehen.

Im traditionellen Authentifizierungsmodell gibt es zwei Schlüsselentitäten; Kunde und Ressourcen-/Dienstleister. Der Client kann eine Web-App, ein Dienst oder ein Benutzer sein, während der Ressourcen-/Dienstanbieter über die gewünschten Ressourcen oder Dienste in einer Umgebung mit eingeschränktem Zugriff verfügt.

Wenn der Client eine bestimmte Ressource benötigt, authentifiziert er sich beim Ressourcenanbieter, indem er entsprechende Anmeldeinformationen bereitstellt. Obwohl dies ein einfacher Prozess ist, besteht auch ein großes Risiko einer Sicherheitsverletzung.

Im Gegensatz dazu ist das OAuth-Authentifizierungsmodell mit drei Entitäten etwas komplexer; Client, der im Namen des Benutzers handelt, Benutzer, der Zugriff auf eine Ressource benötigt, und der Server, der die Ressource verwaltet.

Da es drei Entitäten gibt, wird der Prozess als dreibeinige Authentifizierung bezeichnet. In Fällen, in denen der Client und der Benutzer jedoch dieselben Einheiten sind, wird der Authentifizierungsprozess zu einer zweibeinigen Authentifizierung.

OAuth-Authentifizierungsworkflow

Arbeitsablauf

  • Der Client fordert die Benutzerberechtigung für den Zugriff auf den Server an .
  • Wenn der Benutzer der Anfrage stattgibt, erhält der Kunde das Recht, fortzufahren.
  • Der Client präsentiert seine Identität und das Mandat des Clients dem Autorisierungsserver (API) und fordert einen Token an.
  • Bei erfolgreicher Validierung der Identität und des Mandats stellt der Autorisierungsserver (API) dem Client ein Zugriffstoken aus. An diesem Punkt ist die Authentifizierung abgeschlossen.
  • Als nächstes nähert sich der Client dem Server , um eine bestimmte Ressource anzufordern. Zu diesem Zeitpunkt sendet der Client auch das Zugriffstoken an die
  • Wenn das Zugriffstoken validiert ist, gewährt der Server Zugriff auf die angeforderte Ressource.

Der Client erstellt die signierte Anfrage für ein Anfrage-Token. Diese Anforderung wird auch als temporäre Anmeldeinformationen bezeichnet. Die Anfrage wird an den entsprechenden Endpunkt-URI gesendet. Diese Anfrage umfasst mehrere wichtige Parameter:

  • oauth_consumer_key : Dieser Schlüssel identifiziert die Anwendung, von der die Anforderung stammt.
  • oauth_timestamp : Server verwenden diesen Zeitstempel zur Optimierung des Nonces-Speichers.
  • oauth_nonce : Dies ist das einzigartige anwendungsgenerierte Token für jede einzelne Anfrage.
  • oauth_signature : Dieser wichtige Teil der API-Anfrage ist der Hash aller Komponenten der Anfrage und einiger OAuth-Werte.
  • oauth_signature_method : Das OAuth-Plugin bietet eine einzige Signaturmethode: HMAC-SHA1.
  • oath_callback : Die URL, an die der Benutzer nach der Autorisierung weitergeleitet wird. Die Anfrage wird verifiziert und ein Request Token mit den folgenden Parametern ausgegeben.
  • oauth_token : Dies ist das Anwendungstoken, das aus der Antwort des Autorisierungsservers entfernt wird. Dieses Token wird dann an den API-Server gesendet.
  • oauth_token_secret : Dies ist ähnlich dem Benutzerkennwort. Die Anfrage wird dann vom Kunden autorisiert. Dazu wird ein Request-URI erstellt und oauth_token zum Server-Autorisierungsendpunkt-URI hinzugefügt. Der Benutzer autorisiert das Senden dieser Anfrage, indem er die entsprechenden Anmeldeinformationen bereitstellt.

Wenn im ersten Schritt die oauth_callback- URI verfügbar ist, leitet der Server auf die URI um, wobei die folgenden Parameter zum Abfragestring hinzugefügt werden:

  • oauth_token : Das Token ist bereits vorhanden.
  • oauth_verifier : Verifiziert die Identität des Ressourcenbesitzers gegenüber dem Client.

Wenn der oauth_callback- URI im ersten Schritt nicht bereitgestellt wurde, sendet der Server den Wert von oauth_verifier, damit der Ressourcenbesitzer den Client manuell informieren kann.

Nach dem Empfang von oauth_verfier fordert der Client den Server nach Token-Anmeldeinformationen an. Dies erfolgt in Form einer Anfrage an den Token-Request-Endpunkt-URI. Diese Anfrage enthält die folgenden Parameter:

  • oauth_token
  • oauth_verfier
  • oauth_consumer_key
  • oauth_signature
  • oauth_signature_method
  • oauth_nonce
  • oauth_version

Installation der OAuth-Authentifizierung

Im Kontext von WordPress wird die OAuth-Authentifizierung durch die Installation der OAuth-Authentifizierungs-API für WordPress implementiert. Diese basiert auf den Spezifikationen von OAuth 1.0a und erweitert diese Spezifikationen tatsächlich um einen zusätzlichen Parameter wp_scope. Dieser Parameter wird an den Endpunkt der temporären Anmeldeinformationsanforderung gesendet.

Das Plugin ist auf Github vom WP REST API-Team verfügbar. Derzeit werden Version 4.4 und höher unterstützt.

Ich werde den Prozess des Klonens des Plugins starten, indem ich in das Verzeichnis /wp-content/plugins/ gehe:

 git-Klon https://github.com/WP-API/OAuth1.git 

Git-Installation

Nachdem der Download abgeschlossen ist, aktivieren Sie das Plugin über die WordPress-CLI:

 wp-Plugin aktivieren OAuth1

Wenn Sie WordPress CLI nicht verwenden möchten, können Sie zum WordPress-Admin >> Plugins gehen und das Plugin über das Menü aktivieren. Alternativ können Sie es auch aktivieren, indem Sie Ihren Browser zu Ihrem WordPress-Admin-Plugins-Bereich navigieren, wenn Sie WP CLI nicht verwenden möchten.

Bewertung der Verfügbarkeit der OAuth-API

Bevor ich den OAuth-Handshake initiiere, überprüfe ich zunächst, ob die API auf dem Server aktiviert ist. Dies geschieht durch Senden einer einfachen GET- Anfrage an die /wp-json/ endpoint und analysieren Sie dann die vom Server gesendete Antwort.

 GET http://Server-Dev/wp-json/

Dadurch wird eine JSON-Antwort wie folgt zurückgegeben:

mit Authentifizierung

Mein Fokus liegt hier auf dem Wert oauth1 im Wert der Authentifizierungseigenschaft . Für dieses Objekt sind die folgenden Eigenschaften definiert:

  • request : der Endpunkt der temporären Credential-Anforderung
  • authorize : der Endpunkt der Ressourcenbesitzer-Autorisierung
  • access : der Token-Request-Endpunkt
  • version : die verwendete OAuth-Version

Wenn die OAuth-API für eine Site nicht aktiviert ist, würde die Serverantwort einen leeren Autorisierungseigenschaftswert enthalten.

ohne Authentifizierung

Anwendungen erstellen und verwalten

Der erste Schritt besteht darin, sicherzustellen, dass das OAuth1.0-Plugin korrekt installiert und aktiviert ist.

Als nächstes kann ich Anwendungen erstellen und verwalten, indem ich zu WordPress Admin >> Benutzer >> Anwendungen gehe.

Bewerbungsformular verwenden

Auf dieser Seite Registrierte Anwendungen, werde ich eine neue Anwendung registrieren , indem Sie die Add - Schaltfläche Neu klicken und dann in den folgenden drei Felder ausfüllen:

  1. Kundenname: Der Name des Kunden, der im Abschnitt Autorisierte Anwendungen und während des Autorisierungsprozesses angezeigt wird.
  2. Beschreibung : Die optionale Beschreibung des Clients.
  3. Rückruf- URL : Die Rückruf-URL wird beim Generieren temporärer Anmeldeinformationen verwendet.

Nach der Erstellung durch Klicken auf die Schaltfläche Client speichern werden die Parameter Client Key und Client Secret unten auf der Seite für diesen bestimmten Client angezeigt.

Eidbeglaubigung

Ich werde nun das Repository auf dem Client klonen, indem ich den folgenden Befehl ausführe:

 git-Klon https://github.com/WP-API/client-cli 

Client-CLI

Navigieren Sie nun in das geklonte Verzeichnis und installieren Sie Paketabhängigkeiten mit Composer:

 cd client-cli
Komponist installieren

Wenn alles gut geht, sollte die Befehlszeile etwa Folgendes anzeigen:

Komponist installieren

Client-CLI zum Generieren von OAuth-Anmeldeinformationen

Um den OAuth-Autorisierungsprozess zu starten, erhalte ich zunächst die folgenden Parameter vom Server:

  • oauth_consumer_key
  • oauth_consumer_secret

Dies wird über das Terminal generiert und führt den folgenden WordPress-CLI-Befehl aus:

 wp oauth1 hinzufügen

Der Schlüssel und das Geheimnis sind der oauth_consumer_key bzw. oauth_consumer_secret .

Jetzt muss ich den Client mit der WordPress-Site verknüpfen. Navigieren Sie auf dem Client zum Verzeichnis client-cli (zuvor geklont) und führen Sie den folgenden Befehl aus:

 wp --require=client.php api oauth1 connect http://Server-Dev/ --key=<Ihr Schlüssel hier> --secret=<Ihr Geheimnis hier>

Ersetzen Sie die URL, den Schlüssel und das Geheimnis im obigen Befehl. Die Ausgabe sollte wie folgt aussehen:

 wp --require=client.php api oauth1 connect http://Ihr-Server/wordpress-api/ --key=<Ihr Schlüssel> --secret=<Ihr Geheimcode>
Öffnen Sie in Ihrem Browser: http://your-server/wordpress-api/oauth1/authorize?oauth_token=<your-token>
Gib den Bestätigungscode ein:

Navigieren Sie zu der vom Server angegebenen URL und authentifizieren Sie sich, indem Sie auf die Schaltfläche Autorisieren klicken:

WP-REST-API verbinden

Auf dem nächsten Bildschirm wird Ihnen das Verifizierungstoken (oder der oauth_verifier) ​​angezeigt:

Autorisierungs-Token

Kopieren Sie den Verifizierer und fügen Sie ihn in das Terminal ein. Sie erhalten einen Key und ein Secret , die im Wesentlichen das oauth_token bzw. oauth_token_secret sind:

HTTP-Client zum Generieren von OAuth-Anmeldeinformationen

Da das OAuth 1.0a-Server-Plug-in dem standardmäßigen dreibeinigen Ablauf folgt, umfasst das Generieren von OAuth-Anmeldeinformationen die folgenden Schritte:

  • Erwerb von temporären Zeugnissen
  • Benutzerberechtigungen
  • Token-Austausch

Erwerb temporärer Anmeldeinformationen

Ich werde eine POST- Anfrage an den Endpunkt /oauth1/request senden, um temporäre Anmeldeinformationen abzurufen. Beachten Sie, dass dieser Endpunkt automatisch erkennbar sein sollte, da ein Server die Route möglicherweise selbst ersetzt.

Die POST- Anforderung sollte die Parameter oauth_consumer_secret enthalten , die beim Registrieren eines Verbrauchers für die Anwendung erworben wurden. Die Anfrage kann auch den Parameter oauth_callback enthalten und diese Callback-URL sollte dem Schema, Host, Port und Pfad der Callback-URL entsprechen, die bei der Registrierung der Anwendung angegeben wurde.

Zusätzlich zu den Parametern oauth_consumer_key und oauth_consumer_secret sollte die Anforderung auch die Parameter oauth_signature und oauth_signature_method enthalten .

Bei Verwendung von Postman wird die oauth_signature automatisch generiert. Ich muss nur den Parameter oauth_signature_method erwähnen. Derzeit wird nur die Signaturmethode HMAC-SHA1 vom OAuth-Server-Plugin unterstützt.

Ich werde Postman jetzt so konfigurieren, dass eine POST- Anforderung an den Endpunkt der temporären Token-Anmeldeinformationen gesendet wird. Wählen Sie als Nächstes auf der Registerkarte Autorisierung die Option OAuth 1.0 aus der Dropdown-Liste aus. Füllen Sie die Felder Verbraucherschlüssel und Verbrauchergeheimnis mit den vom Verbraucher bereitgestellten Werten aus. Überprüfen Sie abschließend, ob die Option Signaturmethode auf HMAC-SHA1 gesetzt ist .

Benutzerberechtigung

Für den Benutzerautorisierungsschritt öffne ich den Autorisierungsendpunkt des Ressourcenbesitzers im Browser und übergebe das oauth_token und oauth_token_secret wie im vorherigen Schritt erhalten als Abfrageparameter:

 http://server-dev/oauth1/authorize?oauth_token=<token_here>&oauth_token_secret=<secret_here> 

Verbindung autorisieren

Autorisieren Sie die Anwendung, indem Sie auf die Schaltfläche Autorisieren klicken. Auf dem nächsten Bildschirm wird ein Verifizierungstoken angezeigt. Dieses Token fungiert nun im nächsten Schritt als oauth_verifier- Token.

Sobald der Benutzer den Client autorisiert hat, wird die Anwendung im Abschnitt Autorisierte Anwendungen auf der Seite Benutzer > Ihr Profil angezeigt.

Token-Austausch

Wenn Sie erneut die Option OAuth 1.0 auf der Registerkarte Autorisierung verwenden , füllen Sie die Felder für Consumer Key und Consumer Secret mit den vom Consumer bereitgestellten Werten aus. Geben Sie in die Felder für Token und Token Secret die Werte oauth_token und oauth_token_secret Parameter (temporäre Anmeldeinformationen) ein.

Da ich auch Parameter in der URL als Abfrageparameter übergeben kann, hänge den Parameter oauth_verifier wie folgt an die URL an:

 http://server-dev/oauth1/access?oauth_verifier=<oauth_verifier_value>

Wenn alle Parameter vorhanden sind, senden Sie die Anfrage, indem Sie auf die Schaltfläche Senden klicken. Wenn alles gut geht, gibt der Server einen 200 – OK- Statuscode zusammen mit dem Antworttext zurück, der die Parameter oauth_token und o auth_token_secret enthält .

 oauth_token=<oauth_token_value>&oauth_token_secret=<oauth_secret_value>

Zu diesem Zeitpunkt werden die zuvor erworbenen temporären Token abgelegt und können nicht mehr verwendet werden.

Die neuen Parameter oauth_token und oauth_token_secret sind die OAuth-Anmeldeinformationen, die Sie im Client zum Generieren authentifizierter Anforderungen verwenden können.

Senden einer Test-authentifizierten Anfrage

Nachdem ich nun die Token-Anmeldeinformationen habe, sende ich mit dem Postman eine Testanforderung an den Server. Die Anfrage erfordert die folgenden Parameter:

Sie benötigen Folgendes, bevor Sie beginnen:

  • oauth_consumer_key
  • oauth_consumer_secret
  • oauth_token
  • oauth_token_secret

Wählen Sie OAuth 1.0 aus der Dropdown-Liste unter der Registerkarte Autorisierung in Postman aus.

Genehmigung

Wenn Sie alle Felder ausgefüllt haben, klicken Sie auf die Schaltfläche Update Request . Aktivieren Sie die Option Parameter zum Header hinzufügen, um die Parameter im Header der Anforderung zu senden, anstatt sie an die Abfragezeichenfolge anzuhängen .

Wenn die Anfrage erfolgreich ist, sendet der Server einen 200 – OK Statuscode.

Einpacken!

In diesem Tutorial habe ich besprochen, wie Sie die OAuth-Authentifizierungs-API für WordPress auf einem Server einrichten und den HTTP-Client zum Abrufen von Token-Anmeldeinformationen verwenden. Wenn Sie ein Problem im Code entdecken oder zur Diskussion beitragen möchten, hinterlassen Sie bitte unten einen Kommentar.