未在youtube OAuth中获取刷新令牌

时间:2016-11-25 19:35:34

标签: oauth youtube oauth-2.0 youtube-api youtube-data-api

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

我成功完成了oauth,但我没有在 Exchange授权代码中获取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"
}

我错过了什么吗?

2 个答案:

答案 0 :(得分:8)

需要做两件事:

  1. 要获取刷新令牌,您必须将access_type=offline作为查询参数传递给oauth start请求。这将确保您在第一次为该帐户执行oauth时获得刷新令牌。
  2. 要在同一帐户中一次又一次地执行oauth时获取刷新令牌,您必须将prompt=consent作为查询参数传递给oauth start请求。
  3. 参考:https://developers.google.com/identity/protocols/OAuth2WebServer#offline

答案 1 :(得分:0)

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

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

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