1

私のアプリはクライアント側で Facebook Javascript SDK 承認を使用し、承認されたユーザー アプリは Facebook API からアクセス トークンをフェッチし、署名付きのリクエストと提供された facebook cookie を使用しcodeて、データベースに保存します。

すべて正常に動作していますが、保存されているアクセス トークンをいつ更新する必要があるのでしょうか? ユーザーがパスワードを変更し、再度サインイン/接続した場合はどうなりますか。

私が理解しているように、彼女は新しいアクセス トークンを取得し、アプリは Facebook からそれをロードする必要があります。しかし、いつ新しいトークンを確認する必要があるかをどのように理解できますか? 各ユーザーの 1 秒あたりのリクエスト数が少ないため (彼女がパスワードを変更しなかった場合)、Facebook の Cookie を使用した各リクエストのチェックは機能しません。それとも、私は何か間違ったことをしていますか?

つまり:

  • クライアント側でユーザーを承認しました
  • 署名付きリクエストでクッキーを作成しました
  • 署名されたリクエストは、サーバー側でユーザーを承認するのに十分です(ユーザーの資格情報を検証します)
  • access tokenユーザーユーザーが自分のアプリにリクエストを行うときはいつでも、Facebook APIを呼び出すことで取得できます(code署名付きリクエストが必要なため)。access tokenだから、保存していないときや既存のaccess token有効期限が切れたときにやっています。
  • access tokenデータベースに保存され、いつでも、別のスレッドで、おそらく数分後に使用できます (つまり、署名付きのリクエストを含むユーザー リクエストと Cookie がないことを意味します)。
  • 有効期限が切れていない保存access tokenが、Facebook側で無効になっている場合はどうなりますか? new をフェッチする必要がありaccess tokenますが、この時点で Cookie が失われています。

現在code、署名されたリクエストからデータベースに保存し、無効であることがわかったら、access tokenそれをロードしようとする方法しかありません。しかし、それは適切な方法であり、ほとんどの場合にはあまり使用できないと確信しています

4

1 に答える 1

3

クライアント トークンとサーバー トークンがあり、クライアント トークンは短命 (数時間) で、サーバー トークンは長命 (60 日) です。

クライアント側のトークンは、「無効なアクセストークンと期限切れのアクセストークンの処理」ガイドに記載されているように、新しいトークンを簡単に取得できるため、それほど気にする必要はありません。

Javascript SDK で認証を実装するデスクトップ Web およびモバイル Web アプリ

FB.getLoginStatus() を呼び出すか、FB.init() を呼び出すときに status: true が設定されていることを確認することは、次回ユーザーがアプリケーションにアクセスして Facebook にサインインしたときに、これらの呼び出しの結果として渡される authResponse オブジェクトを意味します。新しい有効なアクセス トークンが含まれます。

この場合、ユーザーがアプリケーションを使用して暗黙的に新しいアクセス トークンを生成するという単純な行為です。

データベースに保持するサーバー側のトークンは、簡単には再現できません。ユーザーを認証ダイアログに再度送信する必要があります。

サーバー側の認証フローを実装するデスクトップ Web およびモバイル Web アプリ

この場合、新しいアクセス トークンを取得するには、サーバー側の完全なフローをユーザーに再度渡す必要があります。つまり、コードを取得し、それを新しいアクセス トークンと交換します。

ただし、ユーザーがアプリケーションの認証を解除していないと仮定すると、ユーザーを OAuth ダイアログにリダイレクトすると、ユーザーはアプリケーションの再認証を求められず、すぐに redirect_uri にリダイレクトされます。これは、再認証プロセスがユーザーに対して透過的に見えることを意味します。

もちろん、クライアント トークンをサーバーに送信して保持することもできますが、有効期間が短いため、あまり意味がありません。もう 1 つのオプションは、新しいエンドポイントを使用してサーバー側で有効なクライアント トークンを拡張し、それを永続化することです。

「いつ新しいトークンを取得するかを知る方法」については、サーバー側で API リクエストを作成しているときに、応答を確認し、エラーが返されたかどうかを確認し、エラーが返された場合はそれが何であるかを確認します (追加した最初の URL にリストがあります) )。トークンの有効期限が切れている場合は、ユーザーを認証ダイアログに再度送信し (何らかのコードをクライアント側に返して、そこから実行できます)、新しいトークンをデータベースに保存します。

Cookie をチェックする必要はありません。これらはバックグラウンドで使用されますが、それらとは何の関係もありません。


編集

Cookie は使用しないでください。

あなたがすべきこと:

サーバー側では、サーバー側認証ガイドの指示に従い、「コード」を取得してトークンと交換する必要があります。そのトークンの有効期間は 60 日です。

必要に応じて(他のスレッドなど)データベースに保存するそのトークンを使用し、Facebookからトークンの有効期限が切れているというエラーが返された場合は、ユーザーを認証ダイアログページに戻すだけです。

「コード」を使用して複数のトークンを取得することはできないため、役に立ちません。ユーザー セッション (およびトークン) が (さまざまな理由で) 無効になった場合でも、API 要求を作成しようとすると、Facebook からエラーが返されます。エラーが発生した場合は、ユーザーを認証ダイアログに再度送信するだけです。

于 2012-05-14T06:37:37.827 に答える