Youtube oAuth 2.0 API检索令牌的永久代码

Youtube oAuth 2.0 API检索令牌的永久代码,youtube,youtube-api,youtube-data-api,Youtube,Youtube Api,Youtube Data Api,基本上,我的目标是制作一个表单,允许我网站的每个访问者在评论部分上传一个视频到我自己的频道。目前我正在使用YouTube OAuth版本3 API。问题是每3600秒,来自YouTube的代码就会过期,我们会被重定向到谷歌OAuth请求许可(例如:)。我们需要在每次按钮过期时手动单击“允许”按钮 那么,是否可以允许访问一次,然后我们不需要再次获取代码以向网站访问者授予上载权限?请尝试检查您是否遵循本文中的步骤/流程 1。将您的应用程序注册为已安装的应用程序 2。请求访问令牌 3。用户同意决定

基本上,我的目标是制作一个表单,允许我网站的每个访问者在评论部分上传一个视频到我自己的频道。目前我正在使用YouTube OAuth版本3 API。问题是每3600秒,来自YouTube的代码就会过期,我们会被重定向到谷歌OAuth请求许可(例如:)。我们需要在每次按钮过期时手动单击“允许”按钮


那么,是否可以允许访问一次,然后我们不需要再次获取代码以向网站访问者授予上载权限?

请尝试检查您是否遵循本文中的步骤/流程

1。将您的应用程序注册为已安装的应用程序

2。请求访问令牌

3。用户同意决定

  • 在这一步中,用户决定是否授予您的应用程序生成作为用户授权的API请求的能力。Google的授权服务器显示您的应用程序的名称,以及它请求使用用户授权凭据访问的Google API服务的名称。然后,用户可以同意或拒绝授予对您的应用程序的访问权限
4。处理来自谷歌的响应

5。为刷新和访问令牌交换授权代码

6。处理响应并存储令牌

在这里,Google将通过返回一个包含短期访问令牌和刷新令牌的JSON对象来响应您的POST请求

{
  "access_token" : "ya29.AHES6ZTtm7SuokEB-RGtbBty9IIlNiP9-eNMMQKtXdMP3sfjL1Fc",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "1/HKSmLFXzqP0leUihZp2xUt3-5wkU7Gmu2Os_eBnzw74"
}
注意:应用程序应将这两个值存储在安全的, 可在不同调用之间访问的长寿命位置 你的申请。刷新令牌使应用程序能够 如果您拥有的访问令牌过期,请获取新的访问令牌。像这样的 如果应用程序丢失了刷新令牌,用户将需要 重复OAuth 2.0同意流,以便应用程序可以获得 新的刷新令牌

{
  "access_token" : "ya29.AHES6ZTtm7SuokEB-RGtbBty9IIlNiP9-eNMMQKtXdMP3sfjL1Fc",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "1/HKSmLFXzqP0leUihZp2xUt3-5wkU7Gmu2Os_eBnzw74"
}
访问令牌定期过期,因此需要刷新。当访问令牌过期时,您的应用程序可能能够使用刷新令牌来获取新的有效访问令牌。服务器端web应用程序、已安装的应用程序和设备都在授权过程中获得刷新令牌

注意 如果:

  • 用户已撤消访问权限

  • 该代币已经六个月没有使用了

  • 用户帐户已超过一定数量的令牌请求


你应该按照肯迪的指示去获取代币——他几乎是直接从文档中提取的。但是,你应该只做一次。诀窍是将
刷新\u令牌
保存在某个地方,然后在上传视频之前使用该令牌获取新的访问令牌。下面是我的快速而肮脏的NodeJS解决方案:

function getAccessToken () {
    const options = {
    method: 'POST',
    uri: 'https://accounts.google.com/o/oauth2/token',
    form: {
        client_id: 'YOUR_CLIENT_ID',
        client_secret: 'YOUR_CLIENT_SECRET',
        refresh_token: 'YOUR_REFRESH_TOKEN',
        grant_type: 'refresh_token'
      }
    }

    return request(options)
        .then(body => JSON.parse(body));
}

getAccessToken.then((token) => uploadSomeYoutubeVideo());

你好,谢谢你的回答,肯。但事实上,问题是我不想每小时都同意我的网站。在我的例子中,访问者可以上传他们的视频并将其放入我的频道。因此,每小时要求刷新令牌是一个问题。我对类似的应用程序使用Google.NET API,刷新是自动完成的。@MikeMeinz你好,迈克。PHP是否也可以获取自动刷新令牌?你知道逻辑是怎么运作的吗?对不起。我不使用PHP版本的API。刷新令牌会过期吗?