【问题标题】:Detect revoked permission for App in Google API在 Google API 中检测 App 被撤销的权限
【发布时间】:2014-03-04 07:20:10
【问题描述】:

我正在使用 PHP Google 客户端库。我成功地从用户/谷歌获得了一个令牌并刷新令牌以与 API 一起使用。 一旦用户在谷歌页面上的谷歌设置中撤销我网站的权限,我就会收到以下错误:

Error calling GET https://www.googleapis.com/calendar/v3/users/me/calendarList: (401) Invalid Credentials

这是预期的行为,因为用户撤销了我的许可。 但是,我如何检测到用户撤销了该访问权限?

目前我执行以下操作以查看我是否可以访问:

//$token json fetched from database
$gclient->setAccessToken($token);
if ($gclient->getAccessToken())
    //i should have access

不幸的是,这段代码没有检测到被撤销的权限。我该如何处理?

【问题讨论】:

  • 撤销权限后,下次尝试获取访问令牌时会出现 Invalid Grant 异常。

标签: oauth oauth-2.0 google-api google-oauth google-api-client


【解决方案1】:

一旦您检测到用户撤销了权限,您可以要求用户再次授予权限。

检测授权已被撤销:前提是您之前有授权,

  • 使用已撤销的access_token 进行 API 调用将导致响应状态代码为 401。像这样

    {
      "error": {
        "errors": [
          {
            "domain": "global",
            "reason": "authError",
            "message": "Invalid Credentials",
            "locationType": "header",
            "location": "Authorization"
          }
        ],
        "code": 401,
        "message": "Invalid Credentials"
      }
    }
    
  • 在撤销后尝试刷新令牌将导致响应带有 400 状态代码和 invalid_grant 消息。正如RFC 6749, Section 5.2中指定的那样

invalid_grant 提供的授权授权(例如,授权 代码、资源所有者凭据)或刷新令牌是 无效、过期、撤销、不匹配重定向 授权请求中使用的 URI,或者被发给 另一个客户。

以下是此类响应的示例:

```lang-js
{
   "error" : "invalid_grant"
}
```

【讨论】:

  • 任何特定的 API 来调用第一个响应? php sdk?
【解决方案2】:

Google API 应该只在没有授权的情况下返回 401。由于您之前获得过授权,因此收到 401 是用户已撤销访问权限的可靠指示。

您是否正在寻找一种检测机制,以便在您进行 API 调用之前通知您此类更改?今天,谷歌没有推送通知机制可以通知您的应用程序此类事件。当然,基于拉取的机制是没有用的——您可以简单地进行 API 调用并更有效地处理 401。

【讨论】:

  • 那不是答案,那是评论:/
猜你喜欢
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多