2

Thisは、私にこの質問をしてくれたコメントです。アクセストークン後のGoogle APIの無効なリクエストの有効期限が終了しました。

私はgoogleapisパッケージを使用して、サーバー側のNode.jsアプリを持っています。ユーザーは自分のGoogleアカウントでログインし、自分のセッションにトークンを保存します。

{ access_token: '<AN ACCESS TOKEN>', 
    token_type: 'Bearer', 
    id_token: '<A LONG ID TOKEN>', 
    expiry_date: <A TIMESTAMP> } // why do some places say there's an expires_in instead of this 

を次のように私が得る資格情報は、ユーザーが既に最初にログインし、受け入れクリック、と私はリフレッシュトークン(私はべきだったように見える)を格納しなかったので何のrefresh_tokenはありませんです。

{ [Error: invalid_request] code: 400 } // ...no further details 

私の2部構成の質問:expiry_dateに達したときに、私たちは自分のGoogleドライブに何かを保存するために、ユーザが要求を作るしようとした場合

だから、私は、エラーメッセージが表示されます:

  • は、私は(トークンの有効期限が切れる前に、コールが正常に動作しますので)私のOAuthクライアントオブジェクトでaccess_tokenは有効期限が切れているので、私はそのエラーメッセージが出てい前提としています。これは正しいです?なぜエラーメッセージが詳細ではないのですか?

  • 上部のリンクされている回答では、もう一度Acceptプロンプトを強制し、更新トークンを取得して永続的に保存し、有効期限が切れたときに新しいアクセストークンを取得することです。トークンが期限切れになっているかどうかを確認するだけでなく、APIを呼び出すときにユーザーを再認証させるよりも、なぜこのオプションが優れていますか?ログインしたユーザーがドキュメントを保存するためにドライブAPI呼び出しを常に行うことができるようにする「正しい」方法はどれですか?

+0

あなたはexpires_in'が実際より最新のエンドポイント –

+0

@HansZにGoogleが実装されている標準的な動作であるので、 'トークンをイントロスペクトする非推奨のエンドポイントを使用しているように見えます。ここで用語「エンドポイント」と「イントロスペクト」を明確にすることはできますか?私はこのためにnode.jsにgoogle apisクライアントの最新バージョンを使用しています。 –

答えて

4
  1. 右、400応答は有効期限が切れているため、アクセストークンです。私はなぜGoogleが詳細を述べないのか分かりませんが、サービスが400ステータスコードを使用して何らかの種類の資格情報問題を示すのは一般的です。ステータスコードのdefinitionは、それがクライアントの問題であることを示します。

  2. どちらの方法も効果があり、それぞれに長所と短所があります。リフレッシュ・トークンを格納する必要がなく、リフレッシュ・プロセスを実装する必要がないため、クライアント側の再認証方法では、実装が簡単になるという利点があります。欠点は、1時間ごとに再認証するようにユーザーを強制することは、ユーザーフレンドリーではないことです。少なくとも、彼らはあなたのアプリから離れてリダイレクトされ、明示的にログインするか再認可する必要があるかもしれません。トレードオフを見て、ユースケースに最適なものを選ぶだけです。

+0

私の代わりのシナリオは、実際には、アクセストークンが期限切れになった場合にユーザーに再認証を強制することだけでした。これは、私がとにかく必要としない "オフライン"アクセスを要求する必要性を排除するでしょう。明確にするために、私の目標は、ウェブアプリケーションにログインしているユーザーでも、Googleドライブ(APIを通じてやっている)にデータを保存するために1時間以上を許可することです。各ユーザーの更新トークンをデータベースに永久保存する必要がありますが、これはちょっとしたことです。なぜこれを行う必要がありますか? –

+0

@GeorgesPompidou:あなたは確かにあなたが望むなら毎時の再認可をユーザに求めることができますが、それはむしろ使い勝手が悪いです。誰もそのページからリダイレクトされたくなく、誰もログインを楽しんでいません。対照的に、リフレッシュトークン(すでにアクセストークンを保存しています)を保存することは自明であり、ユーザーを悩ますことなく、長い間認可を更新する必要があります。 –

+0

アクセストークンは、メモリ内のデータベースにあり、一時的なセッションに格納されます。私が理解できるように、ユーザに一度許可を求めるだけの場合は、各ユーザに関連付けられたアプリケーションの長期データベースにリフレッシュトークンを格納する必要があります。これは、私が "オフラインアクセス"を要求する必要があるという事実と相まって、私のアプリケーションは必要ではないと私には奇妙に思えます。だから、私が欠けているより良い方法があることを望んでいたのです。 –

関連する問題