これは実際には質問ではなく、JWTを使用してWordpress APIに対して認証されたリクエストを行う方法に関するガイドです。私はこれを自分自身へのリマインダーとして、また同じトピックに関するヘルプが必要な人のために書いています。
これは実際には質問ではなく、JWTを使用してWordpress APIに対して認証されたリクエストを行う方法に関するガイドです。私はこれを自分自身へのリマインダーとして、また同じトピックに関するヘルプが必要な人のために書いています。
回答:
JWT認証を使用する理由
バックエンドとしてWordpressを使用し、フロントエンドとしてReact + Reduxアプリを使用するサイトを構築しているため、Wordpress APIにリクエストを送信して、フロントエンドのすべてのコンテンツをプルします。一部のリクエスト(主にPOSTリクエスト)を認証する必要があります。これは、JWTに遭遇したときです。
私たちの必要なもの
WordpressでJWT認証を使用するには、まずWP REST APIプラグインのJWT認証をインストールする必要があります。プラグインの手順で説明されているように、いくつかのコアWordpressファイルも変更する必要があります。特に:
Wordpressインストールのルートフォルダーに含まれる.htaccessファイルに、次の行を追加する必要があります。
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
Wordpressインストールのルートフォルダーにも含まれているwp-config.phpファイルで、次の行を追加する必要があります。
define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key'); // Replace 'your-top-secret-key' with an actual secret key.
define('JWT_AUTH_CORS_ENABLE', true);
JWTが利用可能かどうかをテストする
JWTを使用できることを確認するには、Postmanを起動し、Wordpress APIのデフォルトの「インデックス」にリクエストを送信します。
http://example.com/wp-json/
以下のようないくつかの新しいエンドポイント、/jwt-auth/v1
および/jwt-auth/v1/token
APIに追加されている必要があります。上記のリクエストへの応答でそれらを見つけることができる場合、JWTが利用可能になっていることを意味します。
JWTトークンの取得
とりあえずPostmanにとどまり、Wordpress APIにトークンをリクエストしましょう。
http://example.com/wp-json/jwt-auth/v1/token
応答には、次のような暗号化キーであるJWTトークンが含まれます。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODg4OFwvZm90b3Jvb20tbmV4dCIsImlhdCI6MTUyMjU5NzQ1MiwibmJmIjoxNTIyNTk3NDUyLCJleHAiOjE1MjMyMDIyNTIsImRhdGEiOnsidXNlciI6eyJpZCI6IjEifX19.hxaaT9iowAX1Xf8RUM42OwbP7QgRNxux8eTtKhWvEUM
認証されたリクエストを行う
JWTで認証されたリクエストの例として、IDが300の投稿のタイトルを変更してみましょう。
Postmanで、メソッドとしてPOSTを選択し、次のエンドポイントを入力します。
http://example.com/wp-json/wp/v2/posts/300
「認可」タブで「認証なし」を選択し、「ヘッダー」タブに次を追加します。
'Content-type': 'application/json',
'Authorization': 'Bearer jwtToken' // Replace jwtToken with the actual token (the encrypted key above)
最後に、[ボディ]タブで、未加工およびJSON(application / json)オプションを選択し、オプションの下のエディターで次のように入力します。
{ "title": "YES! Authenticated requests with JWT work" }
これで、SENDを押すことができます。応答タブで、リクエストした投稿に関するすべてのデータを確認します。タイトルキーの値は次のようになります。YES! Authenticated requests with JWT work
register_rest_route( 'jwt-auth/v1', 'your_custom_endpoint ...
。/ jwt-auth /の下にあるものはすべて承認が必要です
@grazianodevの答えを補完するものは、cURLを使用して認証トークンを取得する方法です。
/**
* Generate a JWT token for future API calls to WordPress
*/
private function getToken() {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://site.localhost/wp-json/jwt-auth/v1/token');
curl_setopt($ch, CURLOPT_POST, 1);
# Admin credentials here
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=admin&password=Str0ngPass");
// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
if ($server_output === false) {
die('Error getting JWT token on WordPress for API integration.');
}
$server_output = json_decode($server_output);
if ($server_output === null && json_last_error() !== JSON_ERROR_NONE) {
die('Invalid response getting JWT token on WordPress for API integration.');
}
if (!empty($server_output->token)) {
$this->token = $server_output->token; # Token is here
curl_close ($ch);
return true;
} else {
die('Invalid response getting JWT token on WordPress for API integration.');
}
return false;
}
その後、「Authorization:Bearer $ token」というヘッダーを付けてリクエストを送信します
$ tokenは、上記のgetToken()関数によって返されるトークンです。
個人的にプラグイン「REST APIを無効にし、JWT / OAuth認証を要求する」を使用して、上記のトークンでのみAPIアクセスを制限します。