JWT Authentication for WP REST API の使い方、curl コマンドを使ってトークンを取得する。

今回の記事は、こんな人が書いてるもぐー!
タネマキ運営者
横浜駅のコワーキングスペース タネマキを運営しています。コーヒー部、ジャグリング部。いつの間にかに2児の父で毎日てんやわんや。最近、クロスフィットを始めました。

先日書いた、WordPress でローカル(Mac)の写真を自動でアップロードしたい、試行錯誤編 という記事を実現するために使う WordPress の REST API のための認証を、JWT Authentication for WP REST API — WordPress Plugins を利用して行なったので、使い方などを書き残しておきます。

プラグイン公式ページのサンプルでは、AngularJS を使ったコードが掲載されていますが、今回は curl コマンドでもっと手軽に WordPress の REST API を使える雰囲気出していこうと思います。

流れとしては、

  • プラグインをインストール
  • .htaccess 編集
  • wp-config.php 編集
  • functions.php(必要であれば、トークンの期限設定)
  • curl コマンドでトークンを取得
  • そのトークンを使って API 経由で記事や画像をアップ

という感じです。管理画面とかはありません。

ハマりどころとして考えられるのは、Apache や nginx の設定周辺かなと。VPS や AWS などのクラウド使っているのであれば、問題ないかと思われますが、レンタルサーバーの場合は、たぶん使えると思いますが、場合によっては利用できないこともあるのかなと。Apache なら .htaccess いじるだけなのでたぶん平気ですが。

それでですね、まずは、JWT Authentication for WP REST API — WordPress Plugins をインストールしましょう。

次に、プラグイン導入ページに記載されている流れで、.htaccess などを書き換えていきましょう。間違って消したりすると、サイトの画面が白く飾り気のないシンプルなページになって泣くことになることもあるので、慣れない方は、しっかりバックアップをとっておきましょう。いつでも後戻りできる体制に!

タネマキの環境であれば、公式ページに書かれている通りに、

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.)
RewriteRule ^(.
) - [E=HTTP_AUTHORIZATION:%1]
</IfModule>
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

を追記してます。

お次は、wp-config.php をいじっていきます。

define('JWT_AUTH_SECRET_KEY', 'your-top-secrect-key');
define('JWT_AUTH_CORS_ENABLE', true);

JWT_AUTH_SECRET_KEY は、自分でコマンドなんかで生成しても良いですし、公式ページでは、https://api.wordpress.org/secret-key/1.1/salt/ を使うとええがなぁって書いてありますね。

JWT_AUTH_CORS_ENABLE は、CORs(Cross-Origin Resource Sharing)の設定です。クロスドメイン接続の設定で、セキュリティに関することなので、聞いたことないよ、って方はちょっと調べてからご自分の環境にあった設定にしましょう。

次は、functions.php を編集していきます。これは、任意ですが、初期設定ではトークンの有効期限が1週間なので、面倒なので1年とかにしちゃいます。短いとセキュリティのリスクは下がるとは思いますが、不便ではありますよね。あまり長いのもあれだと思いますが、必要であれば適当な長さにしてみてください。

function jwt_expire($issuedAt)
{
return $issuedAt + (DAY_IN_SECONDS * 365);
}
add_filter('jwt_auth_expire', 'jwt_expire');

を適当なところに追記。

いよいよ、トークンを取得していきましょう。

$ curl 自分のサイト/wp-json/jwt-auth/v1/token -d "username=ユーザー名&password=ログインパスワード" | jq .token

上記コマンドで、トークンが吐き出されます。jq コマンド入れてなかったら、入れてみてください。便利ですよよよーっと。

あとは、REST API に向かって何か投げつけるだけ!

例えば、

$ curl 自分のサイト/wp-json/wp/v2/posts -H "Authorization: Bearer トークン" -X POST -d 'title=もぐ&content=もぐもぐー&slug=mogu' | jq .

とかで、テキストが下書き保存されます。

curl -X POST 自分のサイト/wp-json/wp/v2/media -H "Authorization: Bearer トークン" -F "file=@/画像へのパス.jpg"

とかで、画像が保存されます。

あまり curl で API を使う場面がないかもしれませんが、無駄に投稿してみましょう。それではー

タネマキのSNS

モグ雄の Twitter タネマキの Facebook ページ タネマキの LINE