检查OAuth 2.0是否已授权



我已经实现了我使用Google Gmail API转发电子邮件的应用程序。但是为了这样做,我必须获得OAuth 2.0的授权。如何检查我是否已完成特定设备的授权?

例如,我下载应用程序,选择帐户,并且我想授予一开始发送电子邮件的权限,因为这是强制性操作。我的方式是尝试发送电子邮件,如果失败,我将在AsynCtask中获得OnCancelled(),以便我可以处理GoogleAuthException并获取错误(mlasterror)。这是坏主意,检查是否授权要简单得多。

我需要发送假电子邮件,以获取USERRERERERECOVERABLABLEAUTHIOEXEXPEPTION,然后我处理并授权。之后,一切正常。

activity.startActivityForResult((UserRecoverableAuthIOException) mLastError).getIntent(), MainActivity.REQUEST_AUTHORIZATION);

我选择允许和API都很好。

我可以在共享的偏好中保存该应用程序,但是如果我重新安装了应用程序,则仍然授权设备,并且我没有有关此的信息。

所以我必须使用 curl https://accounts.google.com/o/oauth2/revoke?token=xxx 删除令牌。

为什么我的应用程序仍获得授权?为什么我必须手动撤销令牌?它有一些时间到期,但是如何检查呢?如果未过期,我可以在不再次授权的情况下继续使用我的应用程序。有任何想法吗?

谢谢

您应该捕获userRecoverableAuthException,并且在捕获块中,您可以通过调用userrecrodecoverableauthexception#getIntent()从异常中恢复意图。启动该将用户带到您的应用程序的OAuth2权限页面。

对于这些类型的服务器到服务器交互,您需要一个服务帐户,该帐户是属于您应用程序的帐户,而不是属于单个最终用户的帐户。您的应用程序代表服务帐户拨打Google API,并且不需要用户同意。

您从Google API控制台获得的服务帐户的凭据,包括一个唯一的生成电子邮件地址,一个客户ID和至少一个公共/私有密钥对。您使用客户端ID和一个私钥来创建签名的JWT并以适当的格式构建访问请求。然后,您的应用程序将令牌请求发送给Google OAuth 2.0授权服务器,该服务器返回访问令牌。该应用程序使用令牌访问Google API。令牌到期时,应用程序重复该过程。

请在此处查看OAuth文档:https://developers.google.com/Indentity/protocols/oauth2#expiration

最新更新