WP REST API – OAuth 1.0a Serverプラグインを使用してWordPressサイトに対するOAuth 1.0a認証をセットアップする方法について解説します。OAuth 1.0aは、クライアントアプリケーションがWordPressサイトのリソースにアクセスするための認証プロトコルで、アクセストークンを使用して安全にリソースにアクセスできます。
プラグインのインストールと設定
プラグインのインストール
- WordPressの管理ダッシュボードにログインします。
- 「プラグイン」→「新規追加」に移動します。
- 検索ボックスに「WP REST API – OAuth 1.0a Server」と入力し、プラグインを検索します。
- プラグインをインストールして有効化します。
設定の構成
- プラグインを有効化後、ユーザー > Applications にアクセスします。
- Add Newから新しくアプリケーションを追加します。
- ConsumeerName, description, callbackurlなどを入力します。URLはhttps://ドメイン/callback/などでOKです。
- 「Add Consumer」をクリックします。作成したクライアントの「クライアントキー」と「クライアントシークレット」が表示されます。これらの値を後で使うためにメモしておきます。
OAuth 1.0a認証フローの概要
OAuth 1.0aでは、クライアントアプリケーションがWordPressサイトのリソースにアクセスするために次の3つのステップを経る必要があります。
- リクエストトークンの取得: クライアントは、WordPressサーバーからリクエストトークンを取得します。
- ユーザー承認: リクエストトークンを使用してユーザーの承認を取得します。
- アクセストークンの取得: 承認されたリクエストトークンを使用して、WordPressサーバーからアクセストークンを取得します。このアクセストークンを使ってAPIにアクセスできます。
PythonからWordPress APIにアクセスする例
OAuth 1.0a認証を使って、PythonからWordPressのREST APIにアクセスするための具体的な例を紹介します。ここでは、requests-oauthlib
ライブラリを使用します。このライブラリはOAuth 1.0a認証をサポートしています。
まず、必要なライブラリをインストールします。
pip install requests requests-oauthlib
次に、Pythonコードを以下のように書きます。
import requests
from requests_oauthlib import OAuth1
# WordPressサイトのURLとクライアントキー、シークレット
base_url = "https://your-wordpress-site.com"
request_token_url = f"{base_url}/oauth1/request"
authorize_url = f"{base_url}/oauth1/authorize"
access_token_url = f"{base_url}/oauth1/access"
client_key = "YOUR_CLIENT_KEY"
client_secret = "YOUR_CLIENT_SECRET"
# OAuth1クライアントのセットアップ
oauth = OAuth1(client_key, client_secret=client_secret)
# 1. リクエストトークンの取得
response = requests.post(request_token_url, auth=oauth)
response_data = dict(x.split('=') for x in response.text.split('&'))
resource_owner_key = response_data['oauth_token']
resource_owner_secret = response_data['oauth_token_secret']
print(f"Request Token: {resource_owner_key}")
print(f"Request Token Secret: {resource_owner_secret}")
# 2. ユーザー承認を得るためのURLを生成
print(f"Go to the following link in your browser to authorize:")
print(f"{authorize_url}?oauth_token={resource_owner_key}")
# 3. ユーザー承認後、アクセストークンを取得
verifier = input('Paste the verifier code obtained from the browser: ')
oauth = OAuth1(
client_key,
client_secret=client_secret,
resource_owner_key=resource_owner_key,
resource_owner_secret=resource_owner_secret,
verifier=verifier
)
# アクセストークンの取得
response = requests.post(access_token_url, auth=oauth)
access_token_data = dict(x.split('=') for x in response.text.split('&'))
access_token = access_token_data['oauth_token']
access_token_secret = access_token_data['oauth_token_secret']
print(f"Access Token: {access_token}")
print(f"Access Token Secret: {access_token_secret}")
# 4. アクセストークンを使用してWordPressに下書き記事を投稿する
post_url = f"{base_url}/wp-json/wp/v2/posts"
auth = OAuth1(client_key, client_secret, access_token, access_token_secret)
# 下書き記事の内容
post_data = {
"title": "Sample Draft Post",
"content": "This is a sample draft post created via OAuth 1.0a and REST API.",
"status": "draft" # 投稿ステータスを「draft」に設定
}
# 下書き記事の投稿
response = requests.post(post_url, auth=auth, json=post_data)
# APIレスポンスの確認
if response.status_code == 201:
print("Draft post created successfully!")
print("Post ID:", response.json()['id'])
else:
print(f"Error: {response.status_code}")
print(response.text)
-
リクエストトークンの取得:
–requests.post
を使ってリクエストトークンエンドポイントにリクエストを送信します。
– サーバーから返されるoauth_token
とoauth_token_secret
を取得します。 -
ユーザー承認:
– リクエストトークンを使用して、ユーザーに認証を求めるためのURLを生成します。表示されたURLをクリックすると、ログイン画面と認証画面になります。
– 承認後に取得したトークンを入力します。(verifier
)
-
アクセストークンの取得:
–verifier
コードとリクエストトークンを使用して、アクセストークンエンドポイントにリクエストを送信し、アクセストークンとアクセストークンシークレットを取得します。 -
APIエンドポイントへのアクセス:
– 取得したアクセストークンを使用して、WordPressのREST APIにアクセスします。この例では、投稿の下書きをPOSTします。
実行後、投稿の下書きができていれば成功です。
まとめ
WP REST API – OAuth 1.0a Server
プラグインを使用すると、WordPressサイトに対してOAuth 1.0a認証を設定できます。OAuth 1.0aは、クライアントアプリケーションがセキュアにリソースにアクセスするための少し古めの方法ですが、OAuth2を無料で簡単に利用できる方法が見つからなかったので、OAuth1を使ってみました。