从客户端应用程序使用 Plaid 时如何避免暴露秘密

Posted

技术标签:

【中文标题】从客户端应用程序使用 Plaid 时如何避免暴露秘密【英文标题】:How to avoid exposing secret when using Plaid from client app 【发布时间】:2021-10-11 23:55:45 【问题描述】:

我正在向我的 java 桌面软件添加一个 Plaid 客户端。问题是我看不到任何方法可以让它直接与 Plaid 服务器对话,而无需在应用程序中嵌入 secret。有没有办法让我的应用直接与 Plaid 对话,而无需知道并发送每个请求的秘密字符串?

主要目标是避免在我的服务器上存储客户财务数据,即使它只是在传输中。

我的服务器可以处理链接令牌的创建,可能还可以访问令牌交换,然后将这些令牌提供给客户端应用程序。我希望 client_id 和 access_token 足以让应用程序直接与 Plaid 的服务器执行后续交换,但是每条消息都需要 secret

另一种解决方案是,如果所有请求主体都可以进行公钥加密,然后通过我的服务器进行代理,该服务器验证客户端并将机密添加为 http 标头。我在当前或即将推出的/beta API 中没有找到任何关于此功能的参考。

这一定是以前做过的,所以任何关于如何处理这种情况的提示都非常感谢!

【问题讨论】:

【参考方案1】:

您所描述的解决方案听起来可以工作 - 似乎不需要将支持此功能的特定功能内置到 API 中以使其工作,除非我遗漏了什么?

根据您的使用案例,您还可以考虑避免在服务器上保存哪些财务数据,以及为什么不请求这些数据。例如,Auth 端点可以通过处理器令牌与 Plaid 合作伙伴一起使用,这样您就可以避免接触实际的帐户和路由号码数据。

【讨论】:

感谢您的快速回复亚历克斯。我还是 Plaid 的新手,但为了完成这项工作,我需要 Plaid http API 在每个请求中都不需要 secret 字段。要么这样,要么允许在应用程序和 Plaid 服务器之间对 JSON 请求和响应主体进行公钥加密。第一个是理想的情况。 至于我们希望避免在我们的服务器上拥有的财务数据,那就是任何客户财务数据:账户和交易。我们希望在客户设备上运行的应用程序和 Plaid 服务器(当然还有与银行的 OAUTH)之间进行所有通信。我们将拥有任何客户数据视为潜在的责任。 不确定为什么需要对请求正文进行加密才能使其正常工作?似乎您可以通过 https 将来自客户端的请求正文组合在一起所需的信息发送到您的服务器,然后在那里构造请求(包括添加秘密)。了解您正在使用哪些端点会很有帮助,但一般来说,用于 Plaid 请求正文的信息通常不包含财务信息或 PII。 嗨,Alex,如果我们使用交易和投资端点,响应将包括财务信息,这些信息至少会短暂地通过我们的服务器。除非我遗漏了什么,这是很有可能的! 知道了——你原来的问题建议加密请求,而不是响应,因此我很困惑。 API 的响应通过 https 发送,并在传输过程中加密。大多数 Plaid 客户端的用例涉及支持 Web 访问的应用程序,因此不希望在服务器上拥有任何财务数据不是典型的用例。您当然可以将数据发送到客户端,并且永远不要将其存储在服务器上,但我个人不确定有一种方法可以在传输过程中永远不接触您的服务器。

以上是关于从客户端应用程序使用 Plaid 时如何避免暴露秘密的主要内容,如果未能解决你的问题,请参考以下文章

集成 Plaid 和 Google Apps 脚本

从 Plaid API 中的项目中删除银行账户

在ajax当中使用url重写来避免url的暴露

为啥通过 jQuery Ajax 将 Plaid 链接结果发布到 ASP.NET MVC 控制器时缺少属性数据?

如何“避免” SIGSEGV?

如何在 webhook 触发的函数运行后将信息发送回前端?