web-dev-qa-db-ja.com

Google APIへのログインを自動化して、既知のユーザーアカウントにアクセスするためのOAuth 2.0トークンを取得する方法

さて、この質問は前に尋ねられました ここ 。質問への回答/回答で、ユーザーはrefresh_tokenをアプリケーションに保存するように指示します(どこに保存してもかまいませんが、dbではなくセッションです)。 Googleのドキュメントを確認したところ、access_tokenには有効期限があります。有効期限が切れると無効になります。これで、一定の間隔ごとに、またはサービスが無効なトークンエラーを返した場合にトークンを自動的に更新して、トークンの寿命を延ばすことができますが、何らかの理由で、この手動プロセスは少しハックな感じがします。私の質問は:

  • これは、手動でログインしてアプリケーションにトークンを保持することにより、既知のユーザーアカウントのGoogleカレンダー/アプリデータにアクセスするための最も効果的な(/一般的に受け入れられている)方法ですか?または、プログラムでこのユーザーアカウントにログインし、OAuthの手順を実行できる別のメカニズムはありますか?
18
keyser_sozay

私のアプリケーションでは、フローは次のようになります。

  1. access_tokenが定義されていない場合は、ユーザーをGoogleページにリダイレクトし、そこでユーザーがGoogleデータにアクセスするアプリケーションへのアクセスを許可します。これにより、認証コードがアプリに返されます。
  2. 認証コードを使用して、access_tokenおよびrefresh_tokenを取得します。また、返されたexpires_in値を保存する必要があります。これにより、access_tokenの有効期限が切れ、使用できなくなったことがわかります。
  3. APIにアクセスする必要があるときはいつでも、access_tokenの有効期限が切れているかどうかをDBで確認できます。有効期限が切れている場合は、APIにアクセスする前にrefresh_tokenを使用して新しいaccess_tokenを取得してください。

この方法で問題が発生したことはありません。ユーザーに関する限り、アクセスを許可する必要があるのは1回だけで、それ以降はアプリが認証を処理します。

アプリは、アプリへのアクセスを最初に許可したユーザーに基づいてプログラムで再認証を続け、手動で何もする必要がないため、これで問題は解決するはずです。実際、他の方法があるかどうかはわかりません。OAuthプロセスを再度実行するには、ユーザーがデバイスの前に座って手動でアクセスを許可する必要があるためです。データベースにaccess_tokenrefresh_tokenを永続化するポイント。

26
Matt Healy