1

さて、このトピックにはかなりの混乱があるようで、明確な答えを得るのに苦労しているので、ここに私の質問があります...

サーバーサイド フローを使用して Web アプリのアクセス トークンを取得しています。以前は offline_access を使用していましたが、現在は減価償却されているため、次の状況でトークンを更新する方法が必要です。

1) ユーザーがFBパスワードを変更 2) トークンは自然に失効

私のアプリは結果をユーザーの FB ウォールに投稿するため、更新はサーバーによって自動的に行われる必要があります (Cookie や OAuth ダイアログはありません)。

ここで説明されている新しいエンドポイントを使用できると思いました

http://developers.facebook.com/roadmap/offline-access-removal/

、次のコード (Java):

public static String refreshFBAccessToken(String existingAccessToken)
        throws Exception{
    //Currently not working
    String refreshUrl = "https://graph.facebook.com/oauth/access_token?
        client_id="+FacebookApp.appId+"
        &client_secret="+FacebookApp.appSecret+"
        &grant_type=fb_exchange_token
        &fb_exchange_token="+existingAccessToken;
    URL url = new URL(refreshUrl);
    URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(),
            url.getQuery(), null);
    String result = readURL(uri.toURL());
    String[] resultSplited = result.split("&");
    return resultSplited[0].split("=")[1];
}

しかし、これは機能していないようです (応答 400 が返されます)。ドキュメントを読み直すと、このエンドポイントはクライアント側フローのみを使用して取得したトークンに使用されているようです...

では、サーバー側の流れはどうでしょうか....?

上記のアプローチが正しいか、別の方法があるかを誰かに教えてもらえますか?

どうもありがとう

4

2 に答える 2

3

私が理解していることから、トークンを更新するためのサーバー側のフローはありません。

更新トークンの呼び出しには、有効期間が短いトークンであるユーザー認証プロセスの応答を含める必要があります。

ユーザー ログイン フローの一部としてリフレッシュ トークン プロセスを含める必要があります。または、これがセットアップでうまくいかない場合は、ユーザーに戻ってくるように求めるメールを送信する必要があります。

于 2012-04-11T12:26:48.177 に答える
1

私は Java を知りませんが、構文は C# に非常に似ているので、すべてを正しく行っていると言えます。

しかし、私はこの関数が何をするのか疑問に思っていreadURLます?

それがphpのようget_file_contents()に機能する場合(つまり、HTTP getを行う場合)、それは正しい方法ではないと思います。

Google のリフレッシュ トークン メソッドに関する私の経験に基づいて、特定の URL に対して HTTP GET ではなく HTTP POST を実行する必要があると思います。

于 2012-04-06T20:40:26.290 に答える