无法请求Google Plus API的离线访问权限

时间:2014-02-06 15:41:01

标签: php oauth-2.0 google-plus google-oauth

我遇到Oauth2授权问题。 我正在使用google-api-php-client与G +服务器通信。初始化URL似乎正常(由lib与setAccessType('offline')生成)。但每次用户连接Google时都不会询问有关离线访问的信息。当然稍后令牌就会过期。

以下是生成的网址

的示例

https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=https%3A%2F%2Fwebaserver.com%2Fapp_dev.php%2Fsocial%2Fgoogle%2Fcallback&client_id=271195014651.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fplus.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&access_type=offline&approval_prompt=force&state=319d6021eeec33122901e36e7ce9149d

我忘记了一些重要的细节吗?

2 个答案:

答案 0 :(得分:1)

用户首次授权应用时access_type=offline是否已就位?我猜不是。

系统只会在您请求授权的第一次时间内发送刷新令牌,即使您使用approval_prompt=force或稍后将access_type更改为离线。

您可以将Manage Apps页面和Edit App悬停在应用上,然后点击显示的铅笔。然后,您可以选择Disconnect,auth系统会将未来的登录视为您第一次再次对该应用进行身份验证。您应该使用此系统而不是approval_prompt=force来测试首次用户体验。

答案 1 :(得分:1)

您是否已接受ToS for G + API?如果没有,那可能就是为什么你的申请被禁止了。访问项目控制台并查找API选项卡。

有关参数的更多细节:

  • 如果您包含'approval_prompt = force',则会提示用户每次重新授权。您应该删除它,除非您出于某种特定原因(例如,在数据库损坏事件上丢失了refresh_tokens)。
  • 如果您包含access_type = offline,则只要用户看到同意页面,您就会获得refresh_token。您应该存储它并在初始access_token过期后重新使用它。