3

これは、stackoverflow に関する私の最初の投稿です。ここに行きます。

あるユーザーの YouTube アカウントの読み取り/変更 (キャプション ファイルの変更) を含むサーバー側の PHP アプリケーションを構築しました。ユーザーは OAuth 2 で認証されます。refresh_token を保存し、access_token の有効期限が切れたときに更新要求を正常に行っています。

しかし今、エラーが発生しているようです。これは、偶然にも次の 2 つのことと相関しています。

  • ユーザーによる新しい動画のアップロード
  • 日曜日の夜

それが何かを意味するかどうかはわかりません。

アクセストークンを更新しようとするとエラーが発生し、以前と同じ方法でトークンを更新しています。詳細は次のとおりです。

エラーメッセージ:

[status code] 400
[reason phrase] Bad Request
[url] https://accounts.google.com/o/oauth2/token
[request] POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
User-Agent: Guzzle/2.8.6 curl/7.24.0 PHP/5.3.10
Content-Type: application/x-www-form-urlencoded

client_id=442147492209.apps.googleusercontent.com&client_secret=D7eLQ5b0Mo1Y8uZ30ReWYwls&grant_type=refresh_token&refresh_token=1%2FCLvAt8V_d9sZznpg5YZdJlOJ58ufbHKL4F5Lw8PiJOg
[response] HTTP/1.1 400 Bad Request
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Date: Tue, 02 Oct 2012 16:28:24 GMT
Content-Type: application/json
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Transfer-Encoding: chunked

{
  "error" : "invalid_grant"
}

ソースコードを見たい場合は、github にあります。更新が行われる関連する行番号は次のとおりです: https://github.com/wellcaffeinated/yt-subtitle-explorer/blob/master/app/YTSE/OAuth/LoginManager.php#L330

(このエラーのチェックを追加し、管理者にアプリケーションの再認証を依頼していることに気付くでしょう... しかし、これは理想とはほど遠いものです)

私が調べた他の投稿は、人々に approval_prompt=force を使用するように伝えていたので、そうしています。

編集: 私の最新の疑いは、管理者がログインするたびにオフライン アクセス (approval_prompt=force) を要求しているため、新しい refresh_tokens を生成し続けていることです (他に利用できない場合を除き、記録しません)。Google の OAuth には、アプリケーションごとに「アクティブな」refresh_tokens の最大数がありますか? それともそのようなものですか?

ありがとう!

4

1 に答える 1