Facebookアクセストークンを確認する方法


108

サーバーがしなければならないことだけがあります。アクセストークンの有効性を確認するだけです。

クライアントは、によって取得されたユーザーIDとアクセストークンをサーバーに送信しますFB.getLoginStatus。予想したとおり、など、アクセストークンの有効性をチェックするURLがありますhttp://xxx.facebook.com/access_token?=xxxxxxxxxxxxxxxxxxxxxxxxxxxx

それはそれが利用可能かどうか、またはそのためのAPI(サーバー側)があるかどうかを返しますか?


2
なぜgraph.facebook.com/me/permissionsを呼び出さないのですか?
Igy



3
UIはすばらしいものです developer.facebook.com/tools/debug/accesstoken
Clergyman

回答:


136

これに対して公式にサポートされている方法は次のとおりです。

GET graph.facebook.com/debug_token?
     input_token={token-to-inspect}
     &access_token={app-token-or-admin-token}

詳細については、チェックトークンのドキュメントを参照してください

応答の例は次のとおりです。

{
    "data": {
        "app_id": 138483919580948, 
        "application": "Social Cafe", 
        "expires_at": 1352419328, 
        "is_valid": true, 
        "issued_at": 1347235328, 
        "metadata": {
            "sso": "iphone-safari"
        }, 
        "scopes": [
            "email", 
            "publish_actions"
        ], 
        "user_id": 1207059
    }
}

24
Facebookが重大な変更を導入する可能性が高いと言うのは誤解を招くと思います。彼らはどこにも述べておらず、彼らの公式ドキュメントはこれがアクセストークンを検証する方法であることを明確にしている
Ed Sykes

1
@rynop、まあ、APIエンドポイントの名前は「debug_token」で、Facebook APIドキュメントの「トークンとデバッグに関する情報を取得する」というラベルの付いたセクションで説明されています。ドキュメントのこのセクションは、HTMLアンカー#debugによって参照され、APIがデバッグツールのバックエンドであると述べています。私にはかなりはっきりしているように見えますが、技術的には、この関数が本番環境での使用を目的としていないことを明確かつ直接述べているところはありません... :-)
Jonathan Gilbert

5
ここでの主な問題は、クライアント側からデータが送信されている場合、me?access_tokenメソッドの使用はまったく間違っているということです。どのサイトでもトークンを取得できるため、APIにアクセスしてトークンを使用してサイトへの認証を行います。
srcspider 2015

4
OPは、トークンに関連付けられたユーザーIDを確認する必要がありました。/ meエンドポイントはユーザーIDを返しますが、これはアクセストークンが有効な場合のみです(結局のところ、トークンを使用してどの「me」を返すかを決定するためです)。したがって、/ meを取得してユーザーIDを比較します。各アプリは独自のスコープのユーザーIDを取得するため、別のソースのIDを独自のアプリのトークンで取得した/ meと比較することはできません。
ジョナサンギルバート、

3
ドキュメントはこれまでデバッグ用にこれを使用して参照していた可能性があります。しかし、現在、これはまさにユースケースであることを示唆しています。
AndHeiberg、2016年

78

エラーが発生した場合、トークンが無効なため、単純にhttps://graph.facebook.com/me?access_token=xxxxxxxxxxxxxxxxxをリクエストできます。idプロパティを持つJSONオブジェクトを取得した場合、それは有効です。

残念ながら、これはトークンが有効かどうかを通知するだけで、アプリからのものであるかどうかは通知しません。


9
申し訳ありませんが、私の質問は明確ではありませんでした。問題は、uidとaccessTokenでのみユーザーを検証する方法です。graph.facebook.com/100000726976284?access_token=xxxxxxたとえば、ユーザー100000726976284のアクセストークンがxxxxxxかどうかを確認する簡単な方法はありますか。私が提出した「検証済み」が鍵だと思います。正しいxxxxxxを入力した場合にのみ、応答にVerified = trueが表示されました。
ジェギョン、

14
上記のようにgraph.facebook.com/me?access_token=xxxxxxxxxxxxxxxxxをリクエスト し、リクエストから返されたIDと一致するuidを確認します。
AlexQueue

51
これは、access_tokenがアプリ用であることを確認しません。
エド・サイクス

また、expires_at情報を提供していません。
vinesh

4
ダウン投票、@ EdSykesに同意、この方法では、アクセストークンがアプリに属しているかどうかを確認できませんdeveloper.facebook.com/docs/facebook-login/security
nikis

35

今日まで、私は最初に(FacebookへのGETリクエストを介して)アプリアクセストークンを取得し、次に受信したトークンをapp-token-or-admin-tokenin として使用していたことをお知らせしました:

GET graph.facebook.com/debug_token?
    input_token={token-to-inspect}
    &access_token={app-token-or-admin-token}

しかし、私はこれを行うためのより良い方法に気づきました(GET要求を1つ減らす必要があるという追加の利点があります)。

GET graph.facebook.com/debug_token?
    input_token={token-to-inspect}
    &access_token={app_id}|{app_secret}

アクセストークンのためのFacebookのマニュアルで説明したように、ここで


6
ありがとうございました。その他の注意:リテラル「|」文字がその答えににリンクされているページに示すように(指示「または」しない)が含まれている必要がありますdevelopers.facebook.com/docs/facebook-login/...
マイク・S

1
これは安全ではありませんか?URLクエリパラメータを介してapp-secretを送信すると、URLが暗号化されていないため、サーバーとFacebookとHTTPSの間の「中間」の誰かに公開されます。だれでもdebug_token形式のURLでリクエストを「リッスン」(スニフ)し、Facebookアプリの秘密を盗むことができます。
Simeon、


@Xeingありがとう、私は間違った印象を受けていたようです:) URLのホスト部分だけが暗号化されていないようです。
Simeon、

1
'|'を追加する アプリの秘密がついに私をやっつけてくれました。そうでない場合、このAPIは機能しません。
2018

4

単にリクエストする(HTTP GET):

https://graph.facebook.com/USER_ID/access_token=xxxxxxxxxxxxxxxxx

それでおしまい。



1

交換Access TokenMobile Number and Country Code(サーバー側、クライアント側)

あなたはあなたと得ることができmobile numberますaccess_tokenこのAPI https://graph.accountkit.com/v1.1/me/?access_token=xxxxxxxxxxxxます。あなたが持ってたら多分、mobile numberid、あなたがすることで作業することができます確認してください、あなたをユーザーにserver & database

xxxxxxxxxx 上記は Access Token

応答の例:

{
   "id": "61940819992708",
   "phone": {
      "number": "+91XX82923912",
      "country_prefix": "91",
      "national_number": "XX82923912"
   }
}


交換Auth CodeAccess Token(サーバー側)

あなたが持っている場合 Auth Code代わりにはAccess Token、これを最初に入手できます-https://graph.accountkit.com/v1.1/access_token?grant_typeAPI = authorization_code&code = xxxxxxxxxx&access_token = AA | yyyyyyyyyy | zzzzzzzzzzzz

xxxxxxxxxxyyyyyyyyyyおよびzzzzzzzzzzはそれぞれAuth CodeApp IDおよびApp Secretです。

応答の例

{
   "id": "619XX819992708",
   "access_token": "EMAWdcsi711meGS2qQpNk4XBTwUBIDtqYAKoZBbBZAEZCZAXyWVbqvKUyKgDZBniZBFwKVyoVGHXnquCcikBqc9ROF2qAxLRrqBYAvXknwND3dhHU0iLZCRwBNHNlyQZD",
   "token_refresh_interval_sec": XX92000
}

注-これはserver-sideAPI必要でAPP Secretあることを意味していないされているsharedためsecurity reasonsます。

幸運を。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.