如何使用 RingCentral API 启用 Zapier OAuth 2.0 刷新令牌流

问题描述

我使用 Zapier 的内置 OAuth 2.0 实现和 RingCentral API 构建了 Zapier 集成。该集成适用于启动 OAuth 2.0 对话框、获取访问令牌和调用所需的 API。但是,令牌刷新不起作用,因此 1 小时后 API 返回未经授权的用户错误用户需要再次登录。 1个小时的时间有点长,再次手动登录后调试很慢。

我找不到 Refresh Token API 流的 Zapier 日志记录,所以我无法判断它是否被调用,如果是,结果和错误消息是什么。

如何启用刷新令牌流程,有没有办法调试 Zapier 执行的刷新令牌工作流程?

以下是有关 OAuth 2.0 流程的 Zapier 的信息:

https://platform.zapier.com/docs/oauth#add-access-token-request-and-refresh-token-request-urls

以下是有关刷新令牌流的 RingCentral API 的信息:

https://developers.ringcentral.com/api-reference/Get-Token

这是带有 RingCentral API 信息的 Zapier OAuth 2.0 刷新令牌请求 UI 的样子:

enter image description here

解决方法

需要基本身份验证

我找到了。默认 Zapier OAuth 实现中缺少的 RingCentral API 要求是令牌刷新流程中的基本身份验证。 Zapier 包括初始授权代码流的基本身份验证 Authorization 标头,但不包括刷新令牌流。

我最终预先计算了 Authorization 标头字段,并使用“切换到代码模式”手动将其插入到刷新令牌流请求中,我添加了 Authorization 标头,如下所示:

const options = {
  url: 'https://platform.ringcentral.com/restapi/oauth/token',method: 'POST',headers: {
    'content-type': 'application/x-www-form-urlencoded','accept': 'application/json','Authorization': 'Basic <Base64EncodedClientIdAndClientSecret>'
  },params: {

  },body: {
    'refresh_token': bundle.authData.refresh_token,'grant_type': 'refresh_token'
  }
}

Base64 用于编码以下内容:

process.env.CLIENT_ID + ':' + process.env.CLIENT_SECRET

起初,我将 Authorization 设置为以下内容,但收到了未定义 btoa 的 Zapier 错误。

'Basic ' + btoa(process.env.CLIENT_ID+':'+process.env.CLIENT_SECRET)

测试周期时间

通过将 access_token_ttl 值硬编码为最小值 600 秒(10 分钟)与默认的 3600 秒( 1 小时)。

Zapier 刷新令牌流日志

我仍然无法找到 Zapier 刷新令牌流的 Zapier 日志。

如果无法查看 Zapier 是否确实在发送令牌刷新请求,则测试此情况的一种方法是将令牌刷新 URL 临时设置为监控 URL,例如 RequestBin。