未在 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 中获取刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章
什么是 Youtube OAuth 2.0 用户令牌有效期?