2017-06-02 12 views
1

WordPress Webサイト用とReactアプリケーション用の2つのAWSインスタンスがあります。それらを一緒に接続するために私はWP REST APIにアクセスするために "WP REST API - OAuth 1.0a Server"と "WP-APIのJWT認証"を使用しています。WordPress REST API JWTトークンの検証時にjwt_auth_no_auth_headerエラーが発生しました

/wp-json/jwt-auth/v1/token/validateでトークンを検証しようとしている場合、私は次のようなエラーになっています私は/wp-json/jwt-auth/v1/tokenでトークンを生成することができていますが、私は、他のエンドポイントにアクセスしようとしているとき、または:私が見上げると、いくつか見つかっ

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

を追加するものは.htaccessになります。私は見つけることができるすべてを加えたが、成功しなかった。

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 

私は、任意の認証ヘッダーが要求に存在しているかどうかを確認するために、次のコードを追加しましたが、私はWordPressが多分クッキーを経由して認証しようとしていることを読んでどの

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; 
} 
ここ

https://github.com/Tmeister/wp-api-jwt-auth/issues/6)はありませんデフォルトでは、方法およびエラーを投げ、私は最後に、コードのこの部分が、まだありません成功

add_filter('rest_authentication_errors', '__return_true'); 

を追加しましたので、私は追加JWT認証に達していません"JSON基本認証"プラグインで、ヘッダにusername:passwordも送信します。だから私はヘッダーが剥奪されている問題かどうかはわかりません。プロダクションサーバーにはお勧めできませんので、JWT認証が必要です。

何か助けていただければ幸いです。

答えて

3

他の誰かがこの問題に直面している場合は、私が.htaccessに追加され、このコードはおそらく$authチェックが私を失敗した後、validate_tokenという名前の関数に見て、プラグインファイルjwt-authentication-for-wp-rest-api/class-jwt-auth-public.phpにそう

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

が動作していませんコードのこの部分を追加した:

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

これはAuthorizationヘッダとJWTが期待

として動作することを取得します
+0

これは私をたくさん助けました。未定義のインデックスエラーを回避するには、次のようにします: '$ auth = isset($ allHeaders ['AUTHORIZATION'])? $ allHeaders ['AUTHORIZATION']:false; ' –

+2

ありがとう@steveKim!更新された答え。 –

0

私はhtaccessの行の順番を変えるまで同じ問題に直面していました。 は当初、私はルールの最後にライン

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

を置きます。

RewriteEngineがオンになった後で、エラーjwt_auth_no_auth_headerが修正された行の後。 WP残りのAPIのJWT認証の

<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> 
関連する問題