我在本指南之后做服务器端。
我成功完成了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"
}
我想念什么吗?
需要完成两件事:
- 要获取刷新令牌,您必须将
access_type=offline
作为查询参数传递给OAuth启动请求。这将确保您在第一次进行帐户进行OAuth时获得刷新令牌。 - 要一次又一次地进行OAuth以获取刷新令牌,您必须将
prompt=consent
作为查询参数传递给OAuth Start启动请求。
参考:https://developers.google.com/Indentity/protocols/oauth2weberver#offline
上面的支持文档真的很糟糕且不完整。
这是PHP代码。但是这些设置会产生刷新令牌。
$client->setIncludeGrantedScopes(true);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');