我正在按照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"
}
我错过了什么吗?
答案 0 :(得分:8)
需要做两件事:
access_type=offline
作为查询参数传递给oauth start请求。这将确保您在第一次为该帐户执行oauth时获得刷新令牌。prompt=consent
作为查询参数传递给oauth start请求。参考:https://developers.google.com/identity/protocols/OAuth2WebServer#offline
答案 1 :(得分:0)
关于这方面的支持文件非常糟糕且不完整。
这是php代码。但是这些设置会产生一个刷新令牌。
$client->setIncludeGrantedScopes(true);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');