jwt_auth_no_auth_header-Fehler beim Validieren des WordPress-REST-API-JWT-Tokens

Lesezeit: 3 Minuten

Ich habe zwei AWS-Instanzen, eine für die WordPress-Website und eine für die React-Anwendung. Um sie miteinander zu verbinden, verwende ich “WP REST API – OAuth 1.0a Server” und “JWT Authentication for WP-API” für den Zugriff auf die WP REST API.

Ich bin in der Lage, Token von zu generieren /wp-json/jwt-auth/v1/token aber wenn ich versuche, auf einen anderen Endpunkt zuzugreifen oder wenn ich versuche, das Token zu validieren /wp-json/jwt-auth/v1/token/validate Ich erhalte folgenden Fehler:

{
  "code": "jwt_auth_no_auth_header",
  "message": "Authorization header not found.",
  "data": {
    "status": 403
  }
}

Ich schaute nach oben und fand einige Dinge, denen ich etwas hinzufügen konnte .htaccess. Ich habe alles hinzugefügt, was ich finden konnte, hatte aber keinen Erfolg.

RewriteEngine On
RewriteBase /

# Enable HTTP Auth
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

# WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# For SetEnvIf Authorization
#RewriteRule (.*) - [env=myenv:1]
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
#SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0

Ich habe den folgenden Code hinzugefügt, um zu sehen, ob ein Authorization Header in der Anfrage vorhanden ist, aber es gibt keinen

add_filter( 'rest_pre_dispatch', 'prefix_show_request_headers', 10, 3 );
function prefix_show_request_headers( $result, $server, $request ) {
    $result = $request->get_headers();
    return $result;
}

Hier (https://github.com/Tmeister/wp-api-jwt-auth/issues/6) Ich habe gelesen, dass WordPress vielleicht versucht, sich standardmäßig über die Cookie-Methode zu authentifizieren und einen Fehler auslöst und die JWT-Authentifizierung nicht erreicht, also habe ich diesen Code hinzugefügt, aber immer noch keinen Erfolg

add_filter( 'rest_authentication_errors', '__return_true' );

Endlich habe ich das Plugin “JSON Basic Authentication” hinzugefügt, das auch Benutzername: Passwort in den Headern sendet und es funktioniert. Ich bin mir also nicht sicher, ob es ein Problem mit Headern ist, die entfernt werden. Da es für Produktionsserver nicht empfohlen wird, brauche ich die JWT-Authentifizierung, um zu funktionieren.

Jede Hilfe ist willkommen.

Ich stand vor dem gleichen Problem, bis ich die Reihenfolge der Zeilen auf meinem htaccess ändere. Zuerst habe ich die Linien gesetzt

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

am Ende der Regeln.

Nach den Zeilen, wo erst nach der RewriteEngine On, wurde der Fehler jwt_auth_no_auth_header behoben. On jwt-Authentifizierung für wp rest api

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

  • Das funktioniert, aber WordPress ändert automatisch meine htaccesss

    – Alok Rajasukumaran

    18. Oktober 2018 um 6:55 Uhr

  • das ist großartig, rette meinen Tag. Danke. Ich habe es viele Male gemacht und hatte keine Ahnung von dieser wichtigen Konfiguration

    – Säbel tabatabaee yazdi

    5. Februar 2019 um 15:25 Uhr


Benutzeravatar von Akash Joshi
Akash Joshi

Falls jemand anderes mit diesem Problem konfrontiert ist, dieser Code, den ich hinzugefügt habe .htaccess funktioniert wohl nicht

# Enable HTTP Auth
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

Also in der Plugin-Datei jwt-authentication-for-wp-rest-api/class-jwt-auth-public.phpsuchen Sie in der benannten Funktion validate_tokennach dem $auth Prüfung schlägt fehl Ich habe diesen Code hinzugefügt:

if (!$auth) {
    $allHeaders = getallheaders();
    $auth = isset($allHeaders['Authorization']) ? $allHeaders['Authorization'] : false;
}

Das wird das hinbekommen Authorization Header und JWT funktionieren wie erwartet

  • Das hat mir sehr geholfen. Um einen undefinierten Indexfehler zu vermeiden, können Sie Folgendes tun: $auth = isset($allHeaders['AUTHORIZATION']) ? $allHeaders['AUTHORIZATION'] : false;

    – Steve Kim

    31. Dezember 2017 um 20:54 Uhr

  • Danke @steveKim! Aktualisierte Antwort.

    – Akash Joshi

    1. Januar 2018 um 9:29 Uhr

  • Beachten Sie, dass die Funktion getallheaders() in Nginx, PHP-FPM oder anderen FastCGI-Methoden zum Ausführen von PHP nicht vorhanden ist. Es kann pollyfilled sein. Siehe stackoverflow.com/a/41427998/1298923

    – Benutzer1298923

    23. März 2021 um 10:06 Uhr

Ich habe alles oben Genannte ausprobiert und konnte es nicht zum Laufen bringen, bis ich meine installierten Plugins überprüft und festgestellt habe, dass ich zwei Plugins habe: eines namens “JWT Auth” und das andere: “JWT-Authentifizierung für WP-API”. Als ich “JWT Auth” deaktiviert habe, funktionierte alles einwandfrei. Ich kenne den Grund nicht, aber es scheint eine Art Konflikt zwischen den beiden zu geben.

1403040cookie-checkjwt_auth_no_auth_header-Fehler beim Validieren des WordPress-REST-API-JWT-Tokens

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy