5

如何统一管理应用中第三方的 APIs?

 3 years ago
source link: https://www.v2ex.com/t/797284
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

如何统一管理应用中第三方的 APIs?

  HarryYu · yujiangshui · 8 小时 13 分钟前 · 956 次点击

目前业务依赖大量的第三方 API,每个 API 都有自己的 authentication 的逻辑和相关 secrets ( client id,secrets 等等)。目前的做法是针对每个需要调用的应用都需要封装一层 API,然后将这些 secrets 用环境变量或者 config 来配置上去。

目前存在几个问题:

  1. 维护困难,一旦某个 secret 更新,需要挨个修改全部的应用,如果漏掉一个就会挂掉,部分应用需要紧急发布。
  2. 容易泄漏,这些 client secrets 比较重要,需要有权限控制。但是由于放在应用里面,任何一个应用开发者在本地启动的时候,都需要加载这些配置,一旦加载从内存等都是可以找到的。

目前的解决方案:

  1. 将这些 secrets 和逻辑收敛到一个 Web 应用中,这个应用将读取 secrets 然后支持接收请求,针对不同的第三方 API 进行对应的逻辑,比如获取 access token 然后附加到 request 上面转发给实际接口,然后返回接口的 response 。相当于透传请求,同时附加 access token 等信息。
  2. 这样只需要控制好这个应用的权限即可,维护 secrets 只需要修改一个地方。

但是这个解决方案的问题:

  1. 可能会形成单点故障,如果挂了的话。不过可以用 K8S 等方案解决。
  2. 请求本身来源的鉴权方式不好实现。由于可以被很多应用使用,这里假设最简单的情况就是没有任何校验,拿到任意请求均可透传。但问题很明显,一旦泄漏就完全没有秘密了。所以这个校验规则要如何实现? IP 白名单?还是再实现一套 OAuth 的校验?

所以目前的几个问题:

  1. 你的公司是否有类似需求?是如何实现的?
  2. 是否有开源或者 SaaS 服务提供类似的功能?这种技术或者需求是否有一个关键词?
  3. 数据库连接面临同样的需求,即避免将数据库用户密码等存放在各个应用中,数据库如何实现?

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK