oauth2.0 在Google API中检测应用程序的撤销权限

camsedfj  于 2023-03-28  发布在  Go
关注(0)|答案(2)|浏览(143)

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

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

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

o4hqfura

o4hqfura1#

检测到用户已撤销权限后,您可以要求用户再次授予权限。
要检测授权已被吊销,请执行以下操作:如果你之前有授权的话,

  • 使用已撤销的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消息的响应。

invalid_grant所提供的授权授权(例如,授权代码、资源所有者凭证)或刷新令牌无效、过期、被撤销、与授权请求中使用的重定向URI不匹配,或已被颁发给另一个客户端。
以下是此类响应的示例:

{
       "error" : "invalid_grant"
    }
ngynwnxp

ngynwnxp2#

Google API应该只在没有授权的情况下返回401。由于您之前有授权,因此收到401是用户已撤销访问权限的可靠指示。
您是否正在寻找一种检测机制,在您进行API调用之前通知您此类更改?目前,Google没有一种推式通知机制可以通知您的应用程序此类事件。当然,基于拉式的机制没有什么用处--您可以简单地进行API调用并更有效地处理401。

相关问题