休息api多租户安全

Jos*_*Ch. 10 security api rest oauth-2.0

我有一个关于多租户环境中的restful apis和安全性的问题::

想象一下,你有一个端点:api/branches /:branchId/accounts /:accountId

身份验证通过承载令牌(oauth2)完成.每个令牌包括与调用用户相关联的一组声明.branchId声明包含在令牌中,每个用户属于一个分支.

安全限制如下:

  1. GET请求的branchId应与存储在令牌声明中的branchId匹配.
  2. accountId应该是branchId标识的分支内的有效帐户.

问题是:以下哪种解决方案是正确的?

  1. 维护端点:api/branches /:branchId/accounts /:accountId.并进行必要的安全检查.
  2. 将端点更改为:api/accounts /:accountId,从令牌获取branchId,然后执行剩余的安全检查.

该应用程序旨在成为多租户.每个分支都是租户,每个用户只能访问与其单个分支相关的信息. 谢谢!

Jos*_*Ch. 4

我需要快速做出决定,所以我将使用解决方案 1。如果有人反对或赞成,请加入对话。

赞成的论点:

  1. 我完全同意这个答案:/sf/answers/963514331/,使用完整的 URL 可以让您更有效地决定连接哪个数据存储,并相应地分配负载。
  2. 此外,您可以轻松实现缓存和日志记录,因为完整的 url 具有足够的描述性。
  3. 安全性和 API 的独立性。今天我使用 OAuth2,但也许明天我可以发送请求签名,并且因为 URL 包含满足请求的所有信息,所以它可以工作。

反对的论点:

  1. 信息冗余:branchId位于URL上并在令牌上加密。
  2. 多花点功夫去实施。