コンテンツにスキップ

WordPress の REST API でアプリケーションパスワードを使った認証を行う方法

メインイメージ

WordPress の REST API でアプリケーションパスワードを使った認証を行う方法を説明します。

ちなみに、この REST API へのアクセスにアプリケーションパスワードを使える方法は WordPres 5.6( 2020 年 12 月リリース)で導入されました。

WordPress REST API とは?

WordPress REST API は WordPress 本体に備わった RESTful な API 機能です。 公式の REST API ハンドブックには次のように書かれています。

The WordPress REST API provides an interface for applications to interact with your WordPress site by sending and receiving data as JSON (JavaScript Object Notation) objects. It is the foundation of the WordPress Block Editor, and can likewise enable your theme, plugin or custom application to present new, powerful interfaces for managing and publishing your site content.

Using the WordPress REST API you can create a plugin to provide an entirely new admin experience for WordPress, build a brand new interactive front-end experience, or bring your WordPress content into completely separate applications.

抄訳:

WordPress REST API は、アプリケーションが JSON オブジェクトとしてデータをやりとりして WordPress サイトと対話できるインターフェースを提供します。 WordPress REST API は WordPress ブロックエディタの基盤となっており、また、テーマやプラグインやカスタムアプリケーションがサイトのコンテンツを管理・公開できる新しく強力なインターフェースを提供しています。

WordPress REST API を使用することで、まったく新しい管理者体験を提供するプラグインを作成したり、新しいインタラクティブなフロントエンド体験を構築したり、 WordPress のコンテンツを別のアプリケーションに取り込んだりすることができます。

REST API Handbook | Developer.WordPress.org

アプリケーションパスワードとは?

アプリケーションパスワードは、外部のアプリケーションやスクリプトで WordPress の REST API にアクセスするために使用する専用のパスワードです。 管理画面にログインするための通常のパスワードとは別物なので、 REST API でのアクセスに通常のパスワードを使うことや、その反対の管理画面のログインにこのアプリケーションパスワードを使うことはできません。

アプリケーションパスワードの生成・取得方法

1. WordPress 管理画面にログイン

ログインフォームから WordPress 管理画面にログインします。

2. 「ユーザー」→「プロフィール」をクリック

WordPress 管理画面 → ユーザー → プロフィール

サイドメニューの「ユーザー」→「プロフィール」をクリックしてユーザープロフィールページを開きます。

3. 「新しいアプリケーションパスワードを追加」をクリック

WordPress 管理画面 → ユーザー → プロフィール → アプリケーションパスワード

ページ下部の「アプリケーションパスワード」セクションまでスクロールします。 「新しいアプリケーションパスワード名」にわかりやすいユニークな名前を入力してから「新しいアプリケーションパスワードを追加」ボタンをクリックします。

WordPress 管理画面 → ユーザー → プロフィール → アプリケーションパスワード → 「投稿の自動作成」

「新しいアプリケーションパスワード名」は認証処理には使用されない管理用の名前なので日本語などを使っても問題ありません。

4. 新たに生成されたアプリケーションパスワードをコピー

WordPress 管理画面 → ユーザー → プロフィール → アプリケーションパスワード → 新しいパスワード

「(新しいアプリケーションパスワード名)の新しいパスワード」としてて表示されたパスワードをクリップボードにコピーします。

本ページ作成時点では、パスワードは次のような 4 文字のランダムな文字がスペース区切りで 6 つ繋がったものになっていました。

GQss SzVg jNHf DigP uxBR uFjD

このパスワードは生成後に一度きり表示されるだけで、その後再表示することはできません。 コピーせずにページをリロードしたり別ページに遷移してしまった場合は新たに生成し直す必要があります。

なお、アプリケーションパスワードの生成は原則 HTTPS が有効になったサイトでしか行えません。 HTTPS が無効なサイトでは「アプリケーションパスワード」セクションに次のような説明が表示されます。

WordPress 管理画面 → ユーザー → プロフィール → アプリケーションパスワード → アプリケーションパスワードには HTTPS が必要ですが、このサイトでは有効ではありません。

アプリケーションパスワードを使用すると、実際のパスワードを入力しなくても XML-RPC や REST API などの非対話型システムを介した認証が可能になります。アプリケーションパスワードは簡単に取り消すことができます。サイトへの従来のログインには使用できません。

アプリケーションパスワードには HTTPS が必要ですが、このサイトでは有効ではありません。

これが開発用サイトであれば、適宜、環境タイプを設定して、アプリケーションパスワードを有効化できます。

開発時のローカル HTTP 環境でアプリケーションパスワードを利用する場合は設定ファイル wp-config.php で環境タイプ WP_ENVIRONMENT_TYPElocal にセットする必要があります。

wp-config.php:

define( 'WP_ENVIRONMENT_TYPE', 'local' );

アプリケーションパスワードを使って REST API にアクセスする方法

生成・取得したアプリケーションパスワードを使って REST API にアクセスするには、リクエスト時に Authorization ヘッダーでユーザー名とアプリケーションパスワードをセットすれば OK です。

HTTPie の場合:

http --auth "USERNAME:PASSWORD" 'https://example.com/wp-json/wp/v2/users?context=edit'

cURL の場合:

curl --user "USERNAME:PASSWORD" 'https://example.com/wp-json/wp/v2/users?context=edit'

例えば、ユーザー名が admin でパスワードが GQss SzVg jNHf DigP uxBR uFjD の場合次のようになります。

http --auth "admin:GQss SzVg jNHf DigP uxBR uFjD" 'https://example.com/wp-json/wp/v2/users?context=edit'

ユーザー名かアプリケーションパスワードが間違っている場合は次のようなレスポンスが返されます。

{
    "code": "rest_forbidden_context",
    "data": {
        "status": 401
    },
    "message": "ユーザー一覧を表示する権限がありません。"
}

アプリケーションパスワードの生成と同様、利用時にも原則 HTTPS が有効である必要があります。 HTTPS が無効でなおかつ WP_ENVIRONMENT_TYPElocal 以外にセットされている場合は、ユーザー名とアプリケーションパスワードが正しくてもこの「ユーザー一覧を表示する権限がありません。」のレスポンスが返されることに注意してください。

WordPress.org 関連ページ

関連ページ