在服务器端应用程序中脱机使用之前,如何检查令牌是否被用户撤消?

时间:2017-03-07 23:41:35

标签: google-api-php-client google-oauth2 youtube-analytics-api

我是YouTube API的首次使用者并且一直在关注文档。然而,在非基本功能方面,文档非常不清楚,并且似乎没有其他文档供我检查以回答我自己的查询。

让我解释一下:

我已经实现了https://developers.google.com/youtube/reporting/guides/authorization/server-side-web-apps#example提供的基本身份验证/令牌示例,但效果很好。

现在,假设访问令牌存储在数据库而不是会话中(以后用于"离线"数据检索)......我的问题是:

如何检查用户是否已撤销对我的应用程序的访问权限,可能是通过他/她的帐户设置?如果以这种方式撤销并且我尝试离线使用(现在无效)访问令牌会发生什么?

更新

不幸的是,它似乎没有回归An error occurred: { error: invalid_grant, error_description: Token has been expired or revoked. }

返回的原始错误是

Uncaught exception 'Google_Service_Exception' with message '{ "error": { "code": 401, "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "errors": [ { "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "domain": "global", "reason": "unauthorized" } ], "status": "UNAUTHENTICATED" } }

哪个可以被抓住,但非常奇怪。我没有错误的凭证,因为错误显示...我没有授权!

文档严重缺乏。

1 个答案:

答案 0 :(得分:1)

如果用户撤消对您的应用的权限,然后尝试使用(现在无效的)访问令牌,则会返回消息An error occurred: { error: invalid_grant, error_description: Token has been expired or revoked. }

正确的继续方法是检查是否返回了该错误,如果是,则重定向用户再次进行身份验证,以便生成新的访问令牌,并正确授予访问权限。以下面的逻辑为例:

try {

    //request the service

} catch (Exception $e) {        

    if($e->getMessage() == "Token has been expired or revoked"){
        //redirect user to authenticate again
    } 
}