您如何使用 RingCentral API 的持久凭证进行身份验证?

How do you authenticate with durable credentials to RingCentral's API?

一位客户要求我开发一种解决方案,该解决方案涉及从 Ring Central 提取呼叫信息。具体来说,我想建立一个 Webhook 来在来电时提取实时数据,然后使用通话记录同步来进行夜间对账。这是我使用 RingCentral 的第一个项目。

RC 文档并不完全清楚。我找到了以下信息:http://ringcentral-api-docs.readthedocs.io/en/latest/oauth/,这意味着我需要注册为第三方开发者帐户,使用我自己的凭据,然后每次需要提取任何内容时都请求访问我客户的数据。但是,我正在开发的解决方案将由客户端和 运行 在他们的服务器上拥有,并且他们不希望需要任何手动交互,因此这不是最佳解决方案。他们肯定不想每天多次批准我的脚本访问权限。

我如何使用我的客户的凭据,或者我的客户如何获得持久的凭据,以允许我对他们的数据进行永不过期的访问,以及我如何使用这些凭据连接到 API?

我将在 Lucee 和 MySQL 上使用 CFML 开发此解决方案,使用 RC 的 REST API。数据也将发送到我客户的主要业务系统 Rent Manager。

听起来您正在构建一个您的客户将能够使用的应用程序。

由于您的应用是 "public" 应用,其中用户和应用所有者在不同的组织中,因此可以使用 OAuth 2.0 授权代码流程。 RingCentral 的 OAuth 2.0 解决方案带有访问令牌和刷新令牌对。默认情况下,访问令牌的有效期为一个小时,之后您可以使用刷新令牌获取一个新的(通过官方 RingCentral SDK 自动获取)。默认情况下,刷新令牌的生命周期为 1 周。这意味着您的应用程序将有 1 周的 "idle out" 时间,因此如果在 1 周内没有进行 API 调用,则用户将需要进行身份验证,否则用户和应用程序都不需要执行任何操作将继续工作,即使在更改密码后也是如此。从安全角度来看,此解决方案的好处是用户的凭据永远不会传递到您的应用程序。

如果此方法不适合您,请通过 devsupport@ringcentral.com 联系我们的开发支持团队,讨论您的用例。

在与四位代表交谈后,我没有学到任何有用的东西,我花了几个小时反复试验并浏览文档。最终我想出了如何做到这一点。

首先,不要创建免费的开发者帐户。您最终会看到一个升级帐户的屏幕,您最终会发现这将使您的帐户与您尝试连接的现有 RC 帐户相同!因此,首先登录您正在开发应用程序以从中提取数据的帐户。

登录后创建一个新应用,并确保选择 "Server-only (No UI)" 选项。这将使您的应用符合我们要使用的身份验证方法的条件。如果您不 select 此平台类型,您的身份验证调用将失败。

之后,按照文档中的说明进行 "password flow" 身份验证。目前在 https://developer.ringcentral.com/api-docs/latest/index.html?_ga=2.103110336.1372637327.1532456796-967119171.1528482913#!#RefPasswordFlow

中有详细说明

我在 ColdFusion 中的调用最终看起来像这样:

    <cfhttp method="POST" url="#application.RCserver#/restapi/oauth/token">
        <cfhttpparam type="header"          name="Content-Type"     value="application/x-www-form-urlencoded" />
        <cfhttpparam type="header"          name="Authorization"    value="Basic #ToBase64("#RCclientID#:#RCsecret#")#" />
        <cfhttpparam type="body"            value="grant_type=password&access_token_ttl=600&username=#RCuname#*#RCext#&password=#RCpword#">
    </cfhttp>