close
コンテンツへスキップ

OAuth2 認証

このテキストはAIを使用して翻訳されました。英語の原文を表示するには、こちらをクリックしてください。

OAuth2 を使用すると、アプリケーションはユーザーのパスワードを必要とせずに、WordPress.com および Jetpack サイトに安全にアクセスできます。各アプリがアクセスできる範囲をきめ細かく制御できます。

OAuth2 では、アプリは「スコープ」を通じて必要な特定の権限のみをリクエストできます。ユーザーがアプリを認可する際、どのようなアクセスを許可するのかを正確に確認し、制御できます。

ユーザーは WordPress.com アカウントでログインし、リクエストされた権限を承認または拒否できるため、アプリを安全に接続しながらデータの管理を維持できます。

コード例をお探しですか?WordPress.com REST API Examples リポジトリをご覧ください。さまざまなプログラミング言語やフレームワークで OAuth 認証と API の使用方法を示すサンプルプロジェクトが含まれています。このリポジトリには、ユーザー認可操作のための OAuth ベースの認証と、API エンドポイントへの直接アクセスのためのアプリケーションパスワード認証の両方の例が含まれています。

前提条件

OAuth2 アプリケーションを開発する前に、以下のデータを含む WordPress.com アプリケーションを登録する必要があります。

  1. Client ID:アプリケーションを識別します
  2. Client Secret:アプリケーションを認証します(安全に保管してください)
  3. Redirect URI:認可後にユーザーが戻るURL

これらの認証情報は WordPress.com アプリケーションマネージャーから取得できます。

新しい WordPress.com アプリケーションを登録するには、こちらのフォームをご利用ください。

OAuth2 エンドポイント

OAuth2 に初めて触れる方は、https://oauth.net/ で詳しく学ぶことができます。WordPress.com との統合には、https://public-api.wordpress.com/oauth2/ 名前空間で利用可能なコア OAuth2 エンドポイントを理解する必要があります。これらのエンドポイントは、WordPress.com サイトと Jetpack 接続サイトの両方で一貫して動作します。

認可エンドポイント

エンドポイント: https://public-api.wordpress.com/oauth2/authorize

メソッド: GET(ユーザーリダイレクト経由)

ここが OAuth2 フローの開始点です。ユーザーには認可インターフェースが表示され、アプリケーションがリクエストしている権限を確認して承認できます。このエンドポイントは、アプリケーションの資格情報とリダイレクト URI を検証し、トークン交換用の安全な認可コードを生成します。

必須パラメータ:

オプションパラメータ:

  • scope: スペース区切りの権限(デフォルトは単一ブログへのアクセス)
  • state: CSRF 対策として推奨
  • blog: 単一サイトアクセス用の特定のブログ URL または ID

認可URLの例(認可コードフロー):

https://public-api.wordpress.com/oauth2/authorize?client_id=12345&redirect_uri=https%3A%2F%2Fyourapp.com%2Fcallback&response_type=code&scope=posts%20media&state=abc123xyz

認可URLの例(インプリシットフロー):

https://public-api.wordpress.com/oauth2/authorize?client_id=12345&redirect_uri=https%3A%2F%2Fyourapp.com%2Fcallback&response_type=token&scope=posts%20media&state=abc123xyz

認可URLの例(特定のブログ):

https://public-api.wordpress.com/oauth2/authorize?client_id=12345&redirect_uri=https%3A%2F%2Fyourapp.com%2Fcallback&response_type=code&blog=yourblog.wordpress.com&scope=posts%20media&state=abc123xyz

レスポンス/アクション: ユーザーが承認すると、以下の情報とともに redirect_uri にリダイレクトされます:

  • 認可コードフロー: ?code=AUTHORIZATION_CODE&state=YOUR_STATE
  • インプリシットフロー: #access_token=TOKEN&expires_in=64800&token_type=bearer&site_id=BLOG_ID
  • ユーザーによる拒否: ?error=access_denied

重要な注意事項: redirect_uri パラメータは、アプリケーション作成時に登録したリダイレクト URI と完全に一致する必要があります。末尾のスラッシュの有無など、わずかな違いでも認可が失敗します。これは悪意のあるリダイレクトを防ぐためのセキュリティ対策です。

トークンリクエストエンドポイント

エンドポイント: https://public-api.wordpress.com/oauth2/token

メソッド: POST

このセキュアなサーバー間エンドポイントは、アクセストークンを取得するための2つの異なるグラントタイプを処理します。ユースケースに応じて適切なグラントタイプを選択してください。

認可コードグラント(本番環境用)

すべての本番アプリケーションにはこのグラントタイプを使用してください。ユーザー認可から受け取った認可コードをアクセストークンに交換し、クライアントシークレットを安全に保ちます。

必須パラメータ:

  • client_id: アプリケーションのクライアント ID
  • client_secret: アプリケーションのクライアントシークレット
  • code: 認可ステップから取得した認可コード
  • grant_type: “authorization_code” を指定
  • redirect_uri: 認可時のリダイレクト URL と一致する必要があります

リクエスト例:

curl -X POST https://public-api.wordpress.com/oauth2/token 
  -d "client_id=12345" 
  -d "client_secret=your_client_secret" 
  -d "code=received_authorization_code" 
  -d "grant_type=authorization_code" 
  -d "redirect_uri=https://yourapp.com/callback"

パスワードグラント(開発・テスト専用)

この認可タイプを使用すると、アプリケーションオーナーはユーザー認可フローをバイパスし、WordPress.com の資格情報を使用して直接トークンを取得できます。

パスワードグラントの用途:

  • 開発中の API エンドポイントのテスト
  • ユーザー認可のシミュレーションが現実的でない自動テスト
  • 自分の WordPress.com サイトでの個人的な開発

セキュリティ上の制限:

  • 自分自身の WordPress.com 資格情報でのみ動作します(他のユーザーのものは使用できません)
  • コード内に資格情報を公開する必要があります
  • OAuth2 のユーザー同意およびセキュリティ上の利点をバイパスします
  • 本番アプリケーションでは絶対に使用しないでください

必須パラメータ:

  • client_id: アプリケーションのクライアント ID
  • client_secret: アプリケーションのクライアントシークレット
  • grant_type: 「password」を指定
  • username: WordPress.com のユーザー名
  • password: WordPress.com のパスワード(2FA が有効な場合はアプリケーションパスワード

リクエスト例:

curl -X POST https://public-api.wordpress.com/oauth2/token 
  -d "client_id=12345" 
  -d "client_secret=your_client_secret" 
  -d "grant_type=password" 
  -d "username=your_username" 
  -d "password=your_password_or_app_password"

二要素認証: 2FA が有効な場合は、WordPress.com アカウント設定でアプリケーションパスワードを作成し、通常のパスワードの代わりにそれを使用してください。

移行パス: 開発の利便性のためにまずパスワードグラントから始め、本番環境にリリースする前に認可コードフローを実装してください。パスワードグラントは、ライブアプリケーションでは適切なユーザー認可に置き換える必要がある開発用のショートカットと考えてください。

トークンレスポンス形式(両方のグラントタイプ共通):

{
    "access_token": "YOUR_API_TOKEN",
    "blog_id": "blog_id_number", 
    "blog_url": "https://yourblog.wordpress.com",
    "token_type": "bearer"
}

トークン情報エンドポイント

エンドポイント: https://public-api.wordpress.com/oauth2/token-info

メソッド: GET

安全なトークンの検証とインスペクションを提供します。ユーザー ID、ブログ ID、スコープ権限など、トークンに関する詳細情報を返します。特にシステム間でトークンが送信される場合やモバイルアプリケーションにおいて、トークンの真正性を検証するために不可欠です。

必須パラメータ:

  • client_id: アプリケーションのクライアント ID
  • token: 検証するアクセストークン

リクエスト例:

GET https://public-api.wordpress.com/oauth2/token-info?client_id=12345&token=your_access_token_here

CURL リクエストの例:

curl "https://public-api.wordpress.com/oauth2/token-info?client_id=12345&token=your_access_token_here"

レスポンス形式(有効なトークン):

{
    "client_id": "12345",
    "user_id": "123456789",
    "blog_id": "987654321", 
    "scope": "posts,media"
}

レスポンス(無効なトークン): トークンがアプリケーションに対して認可されていない場合、または無効な場合はエラーを返します。

認証エンドポイント

エンドポイント: https://public-api.wordpress.com/oauth2/authenticate

メソッド: GET(ユーザーリダイレクト経由)

基本的なユーザー ID 検証のみを必要とする WordPress.com Connect アプリケーション向けの専用エンドポイントです。「WordPress.com でログイン」機能に最適化されており、コンテンツ管理ではなく ID 検証を目的として設計されています。

必須パラメータ:

  • client_id: アプリケーションのクライアント ID
  • redirect_uri: 登録済みのリダイレクト URI と一致する必要があります
  • response_type: 安全なサーバーサイド交換には「code」を使用します

オプションパラメータ:

  • scope: 基本的なプロフィールアクセスには通常「auth」を使用します
  • state: CSRF 対策として推奨されます

認証 URL の例:

https://public-api.wordpress.com/oauth2/authenticate?client_id=12345&redirect_uri=https%3A%2F%2Fyourapp.com%2Fauth-callback&response_type=code&scope=auth&state=random_secure_string

レスポンス/アクション: ユーザーが承認すると、認可コード付きで redirect_uri にリダイレクトされます。このコードをトークンエンドポイントで交換すると、限定されたスコープのトークンを受け取ることができます。通常、以下へのアクセスのみが提供されます:

利用可能な API アクセス:

  • /me/ エンドポイント(基本的なユーザープロフィール情報)
  • ユーザー ID 検証データ(ID、ユーザー名、メールアドレス、avatar_URL、認証ステータス)

OAuth2 ワークフロー

WordPress.com は、異なるアプリケーションタイプとセキュリティ要件に対応する2つの主要な OAuth2 ワークフローをサポートしています。

Authorization Code Flow(推奨)

Authorization Code Flow は、クライアントシークレットを安全に保管できるサーバーサイドアプリケーション向けの標準的な OAuth2 ワークフローです。このフローは、安全なサーバー間リクエストを通じて認可コードをアクセストークンに交換することで、最高レベルのセキュリティを提供します。

セキュリティ上の利点:クライアントシークレットがクライアントサイドのコードに表示されることがなく、アクセストークンは認証済みのサーバーリクエストを通じて取得されます。

OAuth2 Authorization Code Flow を示すフローチャート。ユーザーのログイン、認可ページの表示、権限の承認、アクセストークンの取得の各ステップを、ユーザー、アプリケーション、WordPress.com 認可サーバー間で詳細に説明しています。

Implicit Flow(レガシー)

Implicit Flow は、アクセストークンが URL フラグメントで直接返されるブラウザベースのアプリケーション向けに設計されました。しかし、このアプローチは現在ではセキュリティが低いと見なされており、PKCE(Proof Key for Code Exchange)などのより安全な代替手段に置き換えられつつあります。

重要:セキュリティを強化するため、可能な限り Authorization Code Flow の使用を推奨します。

OAuth2 暗黙的フロー(レガシー)のプロセスを示すフローチャート。ログインリクエストの開始、認可ページの表示、認可コードによるリダイレクトなど、ユーザー認可の手順を説明しています。

OAuth2 のスコープと権限

OAuth2 の強みは、きめ細かな権限システムにあります。認可をリクエストする際にスコープを指定することで、アプリケーションがアクセスできる範囲を正確に定義できます。

利用可能なスコープ

  • users: ユーザー情報の表示
  • sites: サイトの一般情報とオプションの表示
  • posts: 投稿の表示と管理
  • comments: 投稿コメントの表示と管理
  • taxonomy: タグとカテゴリーの表示と管理
  • follow: ブログのフォローとフォロー解除
  • sharing: ソーシャルメディアサービスの接続
  • freshly-pressed: Freshly Pressed 投稿の表示
  • notifications: ユーザー通知の表示と管理
  • insights: アプリケーションのアナリティクスの表示
  • read: Reader の購読の管理と表示
  • stats: サイト統計の表示
  • media: サイトメディアの管理
  • menus: サイトメニューの表示と管理
  • batch: 複数の GET リクエストのバッチ処理
  • videos: 動画情報の表示

特別なスコープ

  • global: すべての WordPress.com サービスおよび接続されたサイトにわたるユーザーデータへの包括的なアクセスを付与します
  • auth: 基本的な認証フローのために /me/ エンドポイントへのアクセスのみを提供する限定的なスコープです。関連情報については WordPress.com Connect をご覧ください。

スコープのベストプラクティス

常に最小権限の原則に従ってください:

// Request only necessary permissions
const scopes = 'posts,media'; // Not 'global' unless truly needed

OAuth2 認証の実装

ステップ1: 認可リクエスト

必要なパラメータを指定して、ユーザーを認可エンドポイントに誘導します。

必須パラメータ

  • client_id: アプリケーションのクライアント ID
  • redirect_uri: アプリケーション設定で登録した URL と一致する必要があります
  • response_type: 認可コードフローの場合は「code」、インプリシットフローの場合は「token」を使用します

オプションパラメータ

  • blog: 単一サイトへのアクセス用のブログ URL または ID
  • scope: リクエストする権限のスペース区切りリスト
  • state: CSRF 攻撃を防ぐために推奨されるセキュリティパラメータ

認可 URL の例

const authUrl = `https://public-api.wordpress.com/oauth2/authorize?` +
  `client_id=${clientId}&` +
  `redirect_uri=${encodeURIComponent(redirectUri)}&` +
  `response_type=code&` +
  `scope=posts,media&` +
  `state=${secureRandomString}`;

// // Redirect user to authorization
window.location.href = authUrl;

ステップ2: 認可コードの交換

ユーザーの認可後、(redirect_url のロケーションで)認可コードを受け取ります。このコードをアクセストークンと交換する必要があります。

サーバーサイドのトークン交換

トークンエンドポイントに POST リクエストを送信します:

$curl = curl_init( 'https://public-api.wordpress.com/oauth2/token' );

curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_POSTFIELDS, array(
    'client_id' => $your_client_id,
    'redirect_uri' => $your_redirect_url,
    'client_secret' => $your_client_secret_key,
    'code' => $_GET['code'], // The authorization code
    'grant_type' => 'authorization_code'
) );

curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1);

$auth = curl_exec( $curl );
$secret = json_decode( $auth );
$access_token = $secret->access_token;

成功時のレスポンス

{
    "access_token": "YOUR_API_TOKEN",
    "blog_id": "blog_id_number",
    "blog_url": "https://yourblog.wordpress.com",
    "token_type": "bearer"
}

ステップ3:認証済み API コールの実行

すべての API リクエストで、Authorization ヘッダーに Bearer トークンを使用します:

$access_token = 'YOUR_API_TOKEN';
$curl = curl_init( 'https://public-api.wordpress.com/rest/v1/me/' );

curl_setopt( $curl, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer ' . $access_token ) );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );

$response = curl_exec( $curl );

OAuth2 の高度な機能

トークンスコープの管理

トークンスコープによって、異なるアクセスレベルが提供されます:

  • 単一ブログトークン:特定の1つのブログへのアクセスを許可します
  • グローバルトークン:ユーザーのすべての WordPress.com サイトおよび接続された Jetpack サイトへのアクセスを提供します
  • ユーザー固有のエンドポイント:一部のエンドポイント(「いいね」、フォロー)は、任意のユーザートークンでブログをまたいで機能します

クライアントサイド(Implicit)OAuth

クライアントサイドアプリケーションでは、Implicit Flow を使用して URL フラグメントでトークンを返すことができます:

https://yourapp.com/callback#access_token=TOKEN&expires_in=64800&token_type=bearer&site_id=BLOG_ID

重要な注意事項

  • トークンは現在、2週間後に有効期限が切れます
  • expires_in の値を使用してトークンの更新を処理してください
  • シークレットを安全に保存できないパブリッククライアントにのみ適しています

トークンの検証と管理

OAuth2 トークンを適切に管理することは、堅牢なアプリケーションを構築するうえで不可欠です。これには、トークンの検証、API レスポンスの処理、トークンの有効期限切れや権限不足の適切な管理が含まれます。

アプリケーショントークンの検証プロセスを示すフローチャート。ユーザー識別、APIリクエスト、トークンの有効性・有効期限・権限の問題など、さまざまなレスポンスシナリオの処理を含みます。

トークン情報エンドポイント

トークン情報エンドポイントを使用してトークンの真正性を検証します:

GET https://public-api.wordpress.com/oauth2/token-info?client_id=your_client_id&token=your_token

有効なレスポンス

{
    "client_id": "your_client_id",
    "user_id": "user_id_number",
    "blog_id": "blog_id_number",
    "scope": "posts,media"
}

開発とテスト

パスワードグラントによるテスト(クライアント所有者のみ)

アプリケーション所有者はパスワードグラントを使用して認証トークンを取得できます:

$curl = curl_init( 'https://public-api.wordpress.com/oauth2/token' );

curl_setopt( $curl, CURLOPT_POST, true );

curl_setopt( $curl, CURLOPT_POSTFIELDS, array(
    'client_id' => $your_client_id,
    'client_secret' => $your_client_secret_key,
    'grant_type' => 'password',
    'username' => $your_wpcom_username,
    'password' => $your_wpcom_password, // Use Application Password if 2FA enabled
) );

curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1);
$auth = curl_exec( $curl );
$auth = json_decode( $auth );
$access_token = $auth->access_token;

重要: この方法では、二要素認証が有効になっている場合、アプリケーションパスワードが必要です。

セキュリティのベストプラクティスとエラーハンドリング

実装ガイドライン

  1. State パラメータの検証: CSRF 攻撃を防ぐために、state パラメータを必ず検証してください
  2. トークンの安全な保管: 適切な暗号化を使用してアクセストークンを安全に保管してください
  3. 最小限のスコープリクエスト: アプリケーションが実際に必要とする権限のみをリクエストしてください
  4. ユーザーへの明確な説明: 特定の権限が必要な理由を説明してください
  5. 適切なエラーハンドリング: 認可の失敗、トークンの有効期限切れ、スコープの変更を適切に処理してください

HTTPS の要件

すべての OAuth2 通信では、送信中のトークンと認可コードを保護するために HTTPS を使用する必要があります。

トークン管理

  • アクセストークンはサーバー側で安全に保管してください
  • 適切なトークン更新メカニズムを実装してください
  • トークンのライフサイクルについて明確なドキュメントを提供してください
  • アプリケーション内でトークンの有効期限切れを適切に処理してください

エラーハンドリング

一般的な OAuth2 エラーとその意味:

  • access_denied: ユーザーが認可を拒否しました
  • invalid_client: クライアント資格情報が無効です
  • invalid_grant: 認可コードが無効または期限切れです
  • invalid_scope: リクエストされたスコープが無効または利用できません

認可に関する問題が発生した際にユーザーへ明確なフィードバックを提供できるよう、包括的なエラーハンドリングを必ず実装してください。

まとめ

OAuth2 は、WordPress.com との連携において安全でユーザーフレンドリーな認証方法を提供します。適切なスコープ管理、セキュリティ対策、エラーハンドリングを実装することで、ユーザーのプライバシーを尊重しながら強力な機能を備えたアプリケーションを構築できます。きめ細かな権限システムにより、ユーザーは自分のデータの管理を維持しつつ、アプリケーションが価値ある機能を提供できるようになります。

API エンドポイントの完全なドキュメントや追加の例については、WordPress.com REST API リファレンスをご覧ください。

最終更新日: 6月 18, 2026