未发送 Google YouTube API 刷新令牌

Posted

技术标签:

【中文标题】未发送 Google YouTube API 刷新令牌【英文标题】:Google YouTube API Refresh Token not being sent 【发布时间】:2012-04-10 02:54:39 【问题描述】:

我正在尝试根据此处的 Google 文档将 Google YouTube Data API 与 php 一起使用:https://developers.google.com/youtube/2.0/developers_guide_protocol_oauth2#OAuth2_Refreshing_a_Token。使用 OAuth 进行身份验证时出现了我的问题。我正在使用以下授权 URL,除了我的重定向 uri 和应用程序密钥之外,它与文档说要使用的授权 URL 相同。

$this->authorizationUrl = 'https://accounts.google.com/o/oauth2/auth?';
$this->authorizationUrl .= 'client_id=' . $this->applicationKey . '&';
$this->authorizationUrl .= 'redirect_uri=' . $this->redirect_uri . '/account.php?action=youtube_oauth&';
$this->authorizationUrl .= 'scope=https://gdata.youtube.com&';
$this->authorizationUrl .= 'response_type=code&';
$this->authorizationUrl .= 'access_type=offline';

然后,正如文档所说,我 cURL 如下:

$curl_options = Array(
            CURLOPT_POSTFIELDS => Array(
                'code' => $code,
                'client_id' => $this->applicationKey,
                'client_secret' => $this->applicationSecret,
                'redirect_uri' => $this->redirect_uri . '/account.php?action=youtube_oauth',
                'grant_type' => 'authorization_code'
            ),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_URL => 'https://accounts.google.com/o/oauth2/token'
        );

但是,我的回复从来没有像他们的文档所说的那样给我一个 refresh_token。我刚刚得到其他三个响应项。

像这样的一些问题:Get refresh token google api 说要使用approval_prompt=force,但这也不起作用,完全违背了让access_type=offline 的目的。

关于为什么我会在 4 个响应项中的 3 个得到有效响应的任何想法?

【问题讨论】:

【参考方案1】:

来自 OAuth2.0 文档的 offline access 部分:

当您的应用程序收到刷新令牌时,它是 存储该刷新令牌以供将来使用很重要。如果你的 应用程序丢失了刷新令牌,它将不得不重新提示 在获取另一个刷新令牌之前征得用户同意。如果你需要 重新提示用户同意,包括approval_prompt 授权码请求中的参数,并将值设置为 force.

因此,当您已授予访问权限时,即使在同意页面的查询字符串中将 access_type 设置为 offline,后续对 authorization_codegrant_type 的请求也不会返回 refresh_token

如上面引用所述,为了在已经收到一个refresh_token后,您需要通过提示将您的用户发回,您可以通过设置@来完成987654331@转force

干杯,

PS 此更改也在blog post 中公布。

【讨论】:

为了其他遭受我自己困惑的人的利益,一旦您获得refresh token,您也不需要刷新它,因为您可以使用同一个一遍又一遍。唯一需要一个新的情况是您丢失了它或用户撤销了您的访问权限。【参考方案2】:

您可以尝试 google oauth2 Playground (https://code.google.com/oauthplayground/),看看您的参数和那里有什么区别。

【讨论】:

以上是关于未发送 Google YouTube API 刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Google YouTube Data API OAuth 2 iOS 获取刷新令牌

Google Youtube API

访问未配置。 YouTube 数据 API 尚未在项目 608941808256 中使用

YouTube 数据 API 返回“访问未配置”错误,尽管它已启用

未解决的参考“构建”-YouTube Python API

使用 jquery 调整 Google Maps api v3 DIV 的大小 - 磁贴未正确刷新