WordPress REST APIのOAuthトークンを取得

目次

WordPress REST API で使用する OAuth トークンを取得する PHP プログラムを作成した。プログラムを作成したと言っても、Twitter の OAuth を取得するプログラムからエンドポイントを変更しただけで WordPress 用の OAuth トークンを取得できました。

WordPress REST API は、ユーザを認証する三種類(通常のパスワード、アプリケーションパスワード、OAuth)の方法をサポートしています。この内通常のパスワードとアプリケーションパスワードを使った方法は、通信経路が暗号化されていないHTTP://というサイトではパスワードが丸見えになってしまい危険で使用できません。

そのような場合には、OAuth を使ったユーザ認証を使用します。この OAuth を使った認証では、自分と相手のみが知っている鍵(トークン)を使って署名を作成し、その署名だけを送ります。そのため通信が覗かれても署名に使われたトークンを知られることがなく安全です。

ただしこの OAuth に使用するトークンを取得するには、WordPress を使用するサイトと何度か通信する必要があります。手動でやり取りしてトークンを取得することも可能ですが、Web サーバとブラウザがあればとても簡単です。

そこで今回は、OAuth トークンを取得するプログラムを PHP で作成し、PHP が持っているビルトインサーバを使用して走らすことで WordPress REST API で使用する OAuth トークンを取得しました。わざわざ Apache などの本格的サーバを準備すること無くテスト用 OAuth トークンを簡単に取得出来ました。

準備

WordPress のプラグインをインストール

WordPress に OAuth プラグインをインストールします。また REST API のプラグインは OAuth トークンを取得する時に必要ないと思いますが、動作確認の時に必要なので合わせてインストールしておきます。

WordPress REST API(Version 2)は、WordPress のダッシュボード「プラグインを追加」で検索すると見つかるので、それをインストールします。登録済み OAuth プラグインに無いようなので、OAuth プラグインのページからアーカイブをダウンロードしてインストールします。

どちらもプラグインをインストールした後は、忘れずにインストールしたプラグインを 有効 にしておきます。

REST API が有効になっているかは、次のコマンドで確認できます。

$ curl https://tech.nosuz.jp/wp-json/wp/v2/posts

これで投稿が取得できれば REST API に関しては問題ありません。

PHP と OAuth ライブラリをインストール

手元のパソコンでは、Ubuntu 15.10 が動いています。

まずパッケージから PHP をインストールします。

$ sudo apt install php5-cli php-pear

普通の php5 は Apache などもインストールされてしまうので、php5-cli をインストールします。また PHP のライブラリをインストールするために pear もインストールします。

次は OAuth ライブラリのインストールですが、HTTP_OAuth(注1)は α 版とのことでインストールする時にバージョンを指定する必要があります。

$ sudo pear install HTTP_OAuth
Failed to download pear/HTTP_OAuth within preferred state "stable", latest release is version 0.3.2, stability "alpha", use "channel://pear.php.net/HTTP_OAuth-0.3.2" to install
install failed

$ sudo pear install HTTP_OAuth-0.3.2

PHP で OAuth トークンを取得するプログラム

このライブラリを使って OAuth トークンを取得するプログラムget-oauth-token.phpを作成しました(注2)。

OAuth トークンの取得

アプリケーションの登録

まず OAuth を使用するアプリケーションを、WordPress のダッシュボードにある「ユーザー > Application」で登録します。

application

AddNewApplication

「Add New」ボタンをクリックして、アプリケーションの名前と簡単な説明、callback アドレスを記入して「Add Consumer」ボタンをクリックすれば完了です。

EditApplication

今回手元の PHP ビルトインサーバ機能を使用するので、callback は次のように記入しました。このように callback 先の URL は自分がアクセスできればネットに公開されていなくても大丈夫です。

http://localhost:8080/get-oauth-token.php

登録されると OAuth Credentials が表示されるので、Client Key と Secret をコピーして JSON 形式で別のファイルに保管しておきます。これらの値は、プログラムにハードコードしないでファイルから読み込んで使用します。

OAuth トークンを取得

PHP ビルトインサーバを起動して、上で作成したOAuth トークンを取得するプログラムへのアクセスを待ちます。ビルトインサーバを起動するには、OAuth を取得するプログラムが有るディレクトリに移動し、そこで次のコマンドを実行します。

$ php -S localhost:8080

次にブラウザからhttp://localhost/get-oauth-token.phpにアクセスすると、WordPress のユーザ認証ページにリダイレクトされます。ここで「Authorize」をクリックすると取得した OAuth トークンが表示されます。

authorize

このトークンは後で使用するので、安全なファイルに記録しておきます。

参照と脚注

  1. HTTP_OAuthを使用したのは、PHPのOAuthライブラリーを検索した時に結果の最初の方に有ったからです。まだα版ということですが、特に問題はありませんでした。
  2. このWordPress用のOAuthトークンを取得するプログラムは、APIのエンドポイントURLをWordPress用に修正したのみでTwitterのOAuthトークンを取得するプログラムと全く同じです。