如果先前使用相同的client_id向相同的Google用户发出请求,则Google在OAuth令牌POST调用期间不会返回refresh_token。但是,根据Google文档,应该允许这样做。
首先,是的,我知道在构建Auth URL时,它必须包含:access_type=offline
这是示例身份验证网址:
https://accounts.google.com/o/oauth2/v2/auth?client_id=FOO&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcontent&redirect_uri=MYWEBSITE&access_type=offline&state=BAR&response_type=code
然后在收到回叫后,我发布以获取令牌:https://www.googleapis.com/oauth2/v4/token
只有一个连接时,所有这些都可以100%工作。进行多个单独的连接时,不会返回refresh_token
字段。
关于是否允许这样做,Google的文档似乎有点不一致。
这里说每个用户/客户端组合最多可以包含50个刷新令牌:https://developers.google.com/identity/protocols/OAuth2#expiration
在Auth URL文档中的access_type字段中显示为:
此值指示Google授权服务器在您的应用程序第一次将授权代码交换为令牌时返回刷新令牌和访问令牌。
请注意,当从头开始遍历整个流程一次时,就会发生此问题。
更新:在审查此内容时,我确保每次都在Auth URL中传递不同的state
。这使得Google每次都返回唯一的代码(之前是相同的代码),但这不能解决问题。即使每次都使用Google提供的唯一代码,Google仍只会在第一次返回refresh_token
。