检测Google API中App的已撤销权限

时间:2014-02-07 02:40:54

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

我正在使用PHP Google客户端库。我成功从用户/谷歌获取令牌并刷新令牌以与API一起使用。 只要用户在Google页面上的Googles设置中撤消了我网站的权限,就会出现以下错误:

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

遗憾的是,此代码未检测到已撤销的权限。我该怎么处理?

2 个答案:

答案 0 :(得分:2)

一旦检测到用户撤销了该权限,您就可以再次向用户询问授予权限。

要检测授权是否已被撤销:如果您之前已获得授权,则

  • 使用已撤消的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,或者发给的URI                  另一个客户。

    以下是此类回复的示例:

    { "error" : "invalid_grant" }

答案 1 :(得分:0)

由于缺乏授权,Google API应仅返回401。由于您之前已获得授权,因此接收401是用户已撤销访问权限的可靠指示。

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