将refresh_token交换为access_token的最佳方法是什么?(谷歌API)



我使用access_token对google api进行了许多不同的api调用,因此我需要在access_token过期时处理案例,并交换refresh_token以获得新的。

最好的方法是什么?

我猜每个API调用都要使用try{}catch(){}块。

如果出现异常,在catch()块中,我将进行另一个API调用,以通过https://www.googleapis.com/oauth2/v1/tokeninfo?access_token={accessToken}端点验证access_token

将每个API调用都转换为try() catch(){}块和重复catch()逻辑可能不是一个好主意。

我怎样才能做得更好?

附言:我正在使用guzzle库进行API调用。

如果您使用谷歌提供的库进行调用,那么我建议您检查该库是否尚未为您处理重试。Java库做到了这一点,我怀疑Python库也做到了。

如果你没有使用库,请检查是否没有适合你的语言的库。如果对你有很大帮助。

如果你真的没有选择,也不能使用谷歌的库,那么我建议你在自己的代码中模仿它们的行为。这意味着创建一种GoogleRequest行为(一个类、一个模块或类似的东西,具体取决于您的语言)。此行为将提供一个execute()方法,该方法将处理身份验证错误、刷新令牌并重试请求。

顺便说一句,用于刷新令牌的URL不是您在问题中列出的URL。您必须向URL https://www.googleapis.com/oauth2/v3/token发送一个POST请求,其正文为:

client_secret=YOUR_CLIENT_SECRET&grant_type=refresh_token&refresh_token=YOUR_REFRESH_TOKEN&client_id=YOUR-CLIENT_ID

将其封装在try-catch中是一个非常糟糕的主意,因为然后您将提出一个请求并将其关闭,因此您需要获得另一个请求。这可能会增加你的配额。没有理由向API发送请求以查明您的访问令牌是否过期。

访问令牌有效期为1小时。您可以使用它来决定是否需要刷新您的访问令牌。这就是Google api php客户端库的工作原理

我真的建议你使用谷歌的客户端库,它会让你的事情变得更容易。

我是反图书馆的人,所以我会说读https://developers.google.com/accounts/docs/OAuth2WebServer#refresh只需进行简单的POST并解析JSON响应。它并没有变得简单多少。

如果您只使用Google API客户端PHP库,PHP代码交换就很容易了。来自Google+Quickstart示例:

$client = new Google_Client();
$client->setApplicationName('YOUR_APP_NAME';);
$client->setClientId('YOUR_CLIENT_ID';);
$client->setClientSecret('YOUR_CLIENT_SECRET';);
$client->setRedirectUri('postmessage');
// Code came from a POST
$code = $request->getContent();
// Exchange the OAuth 2.0 authorization code for user credentials.
$client->authenticate($code);
$token = json_decode($client->getAccessToken());

相关内容

  • 没有找到相关文章

最新更新