アクセストークン:デバッグとエラー処理

トークンに関する情報の取得とデバッグ

アクセストークンを扱う場合は、アクセストークンにどんな情報(ユーザーや有効期限など)が関連付けられているかを確認する必要があります。そのような情報を取得するには、FacebookのデバッグツールまたはAPIエンドポイントを使用します。

APIを使用するには、グラフAPIリクエストを発行します。

curl -i -X GET "https://graph.facebook.com/debug_token?
  input_token={input-token}&
  access_token={valid-access-token}

{input-token}は情報を取得したいアクセストークンに置き換え、{access-token}は有効なアクセストークンに置き換えてください。これらのトークンは同じアプリのものでなければなりません。

API呼び出しの応答は、次のようなJSON配列になります。

{ "data":{ "app_id":"{app-id}", "type":"USER", "application":"{app-name}", "data_access_expires_at":1576687825, "expires_at":1570820400, "is_valid":true, "scopes":[ "pages_show_list", "public_profile" ], "granular_scopes":[ { "scope":"pages_show_list", "target_ids":[ "{page-1-app-can-access-id}", "{page-2-app-can-access-id}" ] } ], "user_id":"10215241773831025" } } 

長期アクセストークンの場合は、issued_atフィールドも返されます。

エラーの処理

Facebookは、アクセストークンが無効になったことを通知しません。expiry期限をアクセストークンとともにアプリに送信していない限り、アプリでは、APIにリクエストを発行しようとしたときに特定のトークンが無効になったことがわかるだけです。

セキュリティ関連のイベントが原因で、予期される有効期限が切れる前にアクセストークンが無効になることもあります。

ほとんどのアプリで期限切れのトークンを処理する最善の方法は、APIによってスローされるエラーメッセージをキャプチャすることです。発生したエラーごとに、APIはエラーの性質を記述するJSON本文で、エラーメッセージ、コード、サブコードを返します。コードとサブコードの詳細については、エラーコードリファレンスのドキュメントをご覧ください。

期限切れまたは無効になったアクセストークン

期限切れになったトークンの応答の例

{
  "error": {
    "message": "Error validating access token: Session has expired on Wednesday, 14-Feb-18 18:00:00 PST. The current time is Thursday, 15-Feb-18 13:46:35 PST.",
    "type": "OAuthException",
    "code": 190,
    "error_subcode": 463,
    "fbtrace_id": "H2il2t5bn4e"
  }
}

無効になったトークンの応答の例

この応答は、ユーザーがアプリからログアウトしたとき、またはパスワードを変更したときに送信されます。

{
  "error": {
    "message": "Error validating access token: The session is invalid 
                because the user logged out.", 
    "type": "OAuthException", 
    "code": 190,
    "error_subcode": 460,
    "fbtrace_id": "H2il2t5bn4e"
  }
}

有効なアクセストークンを取得するには、ユーザーが再度ログインする必要があります。アプリはそのトークンを使って、ユーザーに代わってAPI呼び出しを行うことができます。アプリが新しいユーザーに適用するログインフローによって、アプリでどのような方法を採用するべきかが決まります。

アプリ認証エラーの応答の例

誰かが認証を取り消した場合または誰もアプリを認証していない場合、エラー応答はアプリを初めて使用するユーザーに対する応答と同じになります。

認証を取り消されたトークンの応答の例

{
  "error": {
    "message": "Error validating access token: User {user-id} has 
                not authorized application {your-app-id}.", 
    "type": "OAuthException", 
    "code": 190,
    "error_subcode": 458,
    "fbtrace_id": "H2il2t5bn4e"
  }
}
}

iOSアプリでのトークンエラーの処理

一般的に、iOS SDKのAPIエラーは、コールバックに渡されるNSErrorインスタンスによって判明します。詳しくは、iOS SDKエラーのドキュメントをご覧ください。

Androidアプリでのトークンエラーの処理

一般的に、Android SDKのAPIエラーは、Requestsのコールバックに渡されるResponseオブジェクトによって判明します。具体的には、response.getError()を呼び出してFacebookRequestErrorインスタンスを取得できます。

詳しくはこちら

アクセストークンを扱う場合、上記の3つのエラーが最も一般的です。その他のエラーについては、APIエラーリファレンスをご覧ください。