web-dev-qa-db-ja.com

Facebook Graph APIは新しく作成されたアクセストークンを拒否します

本日、WebアプリケーションのFacebookログインフローが一部のユーザーに対して機能しなくなりました。現在のプロファイルを取得しようとすると、エラーが返されます。ユーザーをOAuthログインフローにリダイレクトして生成したアクセストークンは拒否されたと主張しています。

指定された理由は次のとおりです。

ユーザーが90日以上アプリを使用していないため、アクセストークンは無効です

私にとっては、これは意味がありません私たちはアクセストークンを現在のセッション以外の場所に保存せず、ユーザーがFacebookでログインするたびに再作成します。

GET /me呼び出しに対するSpring Socialのスタックトレースは次のようになります。

ERR c.s.f.v.resource.AuthenticationResource Exception when connecting with Facebook
org.springframework.social.RevokedAuthorizationException: The authorization has been revoked. Reason: The access token is invalid since the user hasn't engaged the app in longer than 90 days.
        at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.Java:85)
        at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.Java:59)
        at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.Java:63)
        at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.Java:775)
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.Java:728)
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.Java:702)
        at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.Java:350)
        at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.Java:220)
        at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.Java:215)

この問題はおそらく Facebook APIの変更 に関連していますが、これがログインごとに作成する短期間のアクセストークンにどのように影響するかわかりません。

32
Thomas

更新

この問題はFacebookによって修正されたばかりのようです。


バグを提出した Facebookで、現在(5/3/18)解決に取り組んでいます。

こことバグのコメントにいくつかの回避策が提案されています。要約する:

  1. 以前に再認証を強制するよう要求しなかった新しい許可を追加します
  2. auth_type=reauthorize を使用して、エラーをキャッチし、ユーザーを手動で再認証します
  3. JS SDKに切り替えて、クライアント側のログインを使用します

それが最も簡単な方法であるように思われるので、私は解決策#2に行きます。

6
Thomas

統合テストがテストユーザーでログインしたときにこの問題に遭遇しました。次のJSONがGraph APIから返されました。

{
    "error": {
        "message": "The access token is invalid since the user hasn't engaged the app in longer than 90 days.",
        "type": "OAuthException",
        "code": 190,
        "error_subcode": 493,
        "fbtrace_id": "F/1z2AsTRx8"
    },
    "timestamp_microsecond": "2018-05-30 11:22:01.353949"
}

テストユーザーはアプリに「関与」しないため、これは大きな問題でした。これを修正するために私はしなければなりませんでした:

  • FB開発者サイトにログインします
  • 問題のアプリを見つける
  • [ロール]-> [ユーザーのテスト]で適切なユーザーを見つけます
  • ユーザーの[編集]ボタンをクリックし、[このテストユーザーとしてログイン]をクリックします
  • ログインしたら、[設定]-> [アプリとWebサイト]に移動します。
  • ユーザーが90日以上操作していないアプリの[期限切れ]タブでアプリを見つけます
  • 期限切れのアプリの「表示と編集」ボタンをクリックします
  • ポップアップで[アクセスを更新]をクリックします

これらの手順をすべて完了すると、テストユーザー(および統合テスト)が再び機能しました。

11
Sam Critchley

facebookの応答:

お問い合わせいただきありがとうございます。これは実際には既知の問題であり、すでに別のバグレポートで追跡しています。

レポートを既存のレポートとマージするので、問題を1か所で処理できます。アップデートについては、このスレッドを参照してください: http://developers.facebook.com/bugs/194772814474841/

私の一時的な解決策はJS SDKを使用することでした、私の場合は正しく動作しています...

7
jmcastanos

FB docsでこのリンクを見つけました: Refreshing User Access Tokens

これは、90日後にユーザーがトークンを再確立する必要があることを示しているため、このようなエラーが発生した場合は、ユーザーをリダイレクトして再度登録する必要があります。

彼らは、このドキュメントの上部にある非アクティブなユーザーのトークンを削除することさえ言及しています。たぶん彼らは間違いをして、すべてのユーザートークンを削除しました。 FB Announcement とにかく、解決策は、ユーザーを再購読にリダイレクトすることです。

2
Ofershap

バグは discussion に従って持続します

言及された議論に対するユーザーのコメントによると、私たちはアプリのすべてのユーザーの許可を取り消し、それは機能しました。このために、次のグラフapi endpoint を使用しました。ユーザーのfacebookIDを保持する必要がありました。

よろしく

1
Gaston Perez

TEMPORARY SOLUTIONiOSの場合、SDKコードを変更して「再認証」をサポートする必要があります。ソースコードを変更するには、CocoaPodsを使用してダウンロードする必要があります。次に、ポッドに次の関数をコピーします。 https://github.com/mavris/FacebookFix

0
BlackM