是否有一种有效的方法来保护 Salesforce 对我的 API 的访问?

Is there an effective way to secure access to my API from Salesforce?

我已经为我的 Web 应用程序构建了一个 API,这样客户就可以在不通过仪表板的情况下访问某些功能。我通过向每个客户提供一个 API 密钥来保护它,该密钥可以识别他们并限制他们可以连接的 IP 地址。

我现在收到客户的请求,允许他们从他们的 Salesforce 平台访问此 API。我对 Salesforce 了解不多,当我要求他们让我知道他们的 IP 地址以便我可以创建他们的 API 密钥时,他们能给我的只是 Salesforce 发布的保留 IP 地址列表。这个 IP space 很大(数百万),覆盖了所有 Salesforce,这意味着如果有人获得了 API 密钥的访问权限,他们就可以从任何 Salesforce 帐户使用它。

我已经阅读了一些有关 Salesforce 具有 OAuth 服务和某种应用程序连接服务的内容,但它似乎主要是围绕允许第 3 方连接到 Salesforce 而设计的 - 我有点陷入尝试确定这在我的场景中是否有用(需要在另一个方向进行身份验证)。

除了简单地在我的 API 密钥中放置几十个 CIDR 块之外,如果我能做一些更具体的事情来识别特定的 Salesforce 客户,我将不胜感激。例如,当我的客户给我的 API 打电话时,我可以要求他们在推荐人 header 中表明自己的身份,当然,这对于欺骗来说是微不足道的。

谢谢。

IPs can be spoofed too

Salesforce 有一个概念 "protected custom settings"。您可以制作一个“托管包”(Salesforce 插件,但您不需要将其分发到他们的应用程序交换,Google Play/App 等效商店),为客户端安装它,然后输入 API 以一种即使客户的系统管理员也无法读取的方式进入设置。 设置它会有点工作,但如果您认为您会在该平台上获得更多客户,可能会有所回报。

一个粗糙但有效的 iframe 怎么样?或 link 到您的页面,他们会嵌入到他们应用程序的某处?

您只有 api 把钥匙吗?如果您公开 OAuth2 端点,SF 用户可以登录到您的应用程序,然后 SF 代码可以使用 access_token 他们返回而不是 api 密钥。或者也许您可以使用证书保护访问权限?调用应用程序必须使用证书签署请求。客户可以将其上传到他们的 SF,您可以上传到您的应用程序...

您可以要求 API 调用包含用户的 SF“会话 ID”,并且您可以将其用于 运行 针对源 SF 组织的一些查询。组织 ID、用户的登录历史等即使是系统管理员也无法调整的东西...