未在 YouTube OAuth 中获取刷新令牌

Posted

技术标签:

【中文标题】未在 YouTube OAuth 中获取刷新令牌【英文标题】:Not getting refresh token in YouTube OAuth 【发布时间】:2017-04-10 05:34:36 【问题描述】:

我正在按照this 指南进行服务器端 OAuth。

我成功完成了 OAuth,但在步骤交换授权码以刷新和访问令牌中没有得到refresh_token

请求:

POST /o/oauth2/token HTTP/1.1
HOST: accounts.google.com
content-type: application/x-www-form-urlencoded
content-length: 260

code=4/KEOuzih9jwfnHj7Rl1DeqHhcJF0goKPwtwR5IQ09ieg&
client_id=****.apps.googleusercontent.com&
client_secret=****&
redirect_uri=http%3A%2F%2Flocalhost%3A8000%2FsSignIn.html&
grant_type=authorization_code

回应:


  "access_token" : "****",
  "expires_in" : 3580,
  "token_type" : "Bearer"

我错过了什么吗?

【问题讨论】:

【参考方案1】:

这方面的支持文档非常糟糕且不完整。

这是 php 代码。但是这些设置会产生一个刷新令牌。

$client->setIncludeGrantedScopes(true);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');

【讨论】:

【参考方案2】:

需要做两件事:

    要获取刷新令牌,您必须将access_type=offline 作为查询参数传递给oauth 启动请求。这将确保您在首次为帐户执行 oauth 时获得刷新令牌。 要在为同一帐户一次又一次地执行 oauth 时获取刷新令牌,您必须将 prompt=consent 作为查询参数传递给 oauth 启动请求。

参考:https://developers.google.com/identity/protocols/OAuth2WebServer#offline

【讨论】:

感谢阿布舍克!我正在离线传递 access_type,但我没有启用提示同意。现在它返回刷新令牌。

以上是关于未在 YouTube OAuth 中获取刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

未发送 Google YouTube API 刷新令牌

如何使用 Laravel 管理 OAuth 刷新令牌?

每次我提出请求时 Youtube oAuth 提示授权窗口

什么是 Youtube OAuth 2.0 用户令牌有效期?

如何在到期后使用 OAuth 2.0 以及 iOS 应用程序中的 Youtube API 获取新的访问令牌

从passportjs中的刷新令牌获取oauth访问令牌