61

答えのあるこの質問を見つけましたが、それ以来Facebookがトークンの形式を変更したため、次のようになりました。

AAACEdEose0cBACgUMGMCRi9qVbqO3u7mdATQzg[more funny letters]ig8b3uss9WrhGZBYjr20rnJu263BAZDZD

要するに、あなたはそれから何も推測することはできません。また、アクセストークンデバッガーも見つかりました。これは、トークンを貼り付けた場合に探している情報を表示します。これは便利ですが、プログラムでそれを行うのに役立ちません。

ポイントは、誰かがユーザーのトークンを取得した場合、それを使用してグラフにアクセスできることです。これは、私のアプリケーションで行うことです。ユーザーが私のアプリケーションによって発行されたトークンを転送していることを確認したいのですが、別ではありません。

私のアプリケーションフローは次のとおりです。

  1. Facebookからアクセストークンを取得します(ここで説明されているように、サーバー側のフロー(iPhoneとAndroidも使用されますが、正しく思い出せば同様のフローがあります))
    [デバイス] <-> [facebook ]
  2. そのアクセストークンを使用すると、デバイスはトークン
    [device] <-> [Jonathan's application]を使用してアプリケーションサーバーにアクセス
    します。サーバーでアクセストークンをユーザーに添付し、それを使用してアプリケーション内のそのユーザーにアクセス許可を付与します。(Facebook接続を使用してユーザーを認証します)


私のアプリケーションは保護されており、Facebookに関係なく、行われたアクセスも認証されますが、このフローでは、私が特定した弱いリンクは、取得したアクセストークンがアプリケーション用に署名されていることを確認できないことです-オフラインで使用するためにトークンをキャッシュするため、100%確実にしたいのでそれは好きではありませんそれらは私のアプリケーション用であり、私の権限があります。

したがって、取得したトークンがアプリケーションに関連していることを認証する(最良の)方法は何でしょうか(ユーザーとの関係では、トークンを使用して/ meにアクセスし、このトークンの対象となるユーザーを確認します)

トークンを復号化する必要はありません(ある種のAESだと思います)。トークンがアプリケーションIDと一致することを通知するエンドポイントを探しています。

(編集:重要な場合は、C#SDKを使用します。しかし、その情報を提供するためのグラフ/REST呼び出しも同様に優れています:))

4

4 に答える 4

64

https://graph.facebook.com/app/?access_token=[user_access_token]

これにより、このトークンが生成されたアプリが返されます。これをアプリのIDと比較できます。

于 2012-01-04T16:47:57.250 に答える
25

アクセストークンを検査するための公式のグラフエンドポイントは次のとおりです。

GET graph.facebook.com/debug_token?
      input_token=[user_access_token]&
      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
    }
}

app_token_or_admin_tokenGraphAPI呼び出しを使用して取得できます。

GET graph.facebook.com/oauth/access_token?
     client_id={app-id}
    &client_secret={app-secret}
    &grant_type=client_credentials

そのuser_access_tokenがapp_token_or_admin_tokenを生成したアプリに属していない場合、debug_tokenエンドポイントは失敗します。

関連するFacebookのドキュメント:

于 2013-06-05T18:14:31.577 に答える
5

これを確実にするための文書化された方法は、を使用することappsecret_proofです。

GET graph.facebook.com/v2.5/me?access_token=[TOKEN]&appsecret_proof=[PROOF]

これにより、それが有効なトークンであるだけでなく、トークンがアプリに属していることも確認されます。また、一度にユーザーデータを取得します。

PROOFこれを使用して、C#で上記を導出できます(ここから):

public static string ComputeHmacSha256Hash(string valueToHash, string key)
{
    byte[] keyBytes = Encoding.ASCII.GetBytes(key); 
    byte[] valueBytes = Encoding.ASCII.GetBytes(valueToHash);
    byte[] tokenBytes = new HMACSHA256(keyBytes).ComputeHash(valueBytes);
    valueBytes = null;
    keyBytes = null; 

    StringBuilder token = new StringBuilder();
    foreach (byte b in tokenBytes)
    {
        token.AppendFormat("{0:x2}", b);
    }
    tokenBytes = null; 

    return token.ToString();
}

ComputeHmacSha256Hash(accessToken, appSecret);
于 2016-04-11T17:25:45.497 に答える
4

公式のやり方を使ってみませんか?これは、セキュリティに関するFB自身のビデオからのリクエストです。

リクエスト: https://graph.facebook.com/debug_token?input_token={token-to-check}&access_token={app_id}|{app_secret}

応答: "data": { "app_id": {token-app-id}, "user_id": {token-user-id}, ... }

公式ビデオへのリンク:https ://www.facebook.com/FacebookforDevelopers/videos/10152795636318553/

時間を表示できるようにスクリーンショットを作成しました。興味がある場合は、より多くの情報を見つけることができます。

Facebookのビデオスクリーンショット

于 2017-03-06T13:55:06.073 に答える