我对 Multi-Tenancy 环境中的RESTful API和安全性有疑问。

假设您有一个端点:api/branches/:branchId/accounts/:accountId
认证通过承载 token (oauth2)完成。每个 token 都包含与调用用户相关的一组声明。 token 中包含branchId声明,并且每个用户都属于一个分支。

安全限制如下:

  • GET请求的branchId应该与 token 声明中存储的branchId相匹配。
  • accountId应该是branchId标识的分支内的有效帐户。

  • 问题是:以下哪个解决方案是正确的?
  • 维护端点:api/branches/:branchId/accounts/:accountId。并进行必要的安全检查。
  • 将端点更改为:api/accounts/:accountId,从 token 中获取branchId,然后进行其余的安全检查。

  • 该应用程序应为 Multi-Tenancy 。每个分支都是一个租户,每个用户只能访问与其单个分支关联的信息。
    谢谢!

    最佳答案

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

    支持的参数:

  • 我完全同意以下答案:https://stackoverflow.com/a/13764490/2795999,使用完整的URL可让您更有效地决定与哪个数据存储区连接,并相应地分配负载。
  • 另外,由于完整的URL具有足够的描述性,因此您可以轻松实现缓存和日志记录。
  • 安全性和API的独立性。今天,我正在使用OAuth2,但也许明天,我可以发送请求签名,因为URL具有满足请求的所有信息,因此它将起作用。

  • 反对:
  • 信息冗余:branchId在URL上,并在 token 上加密。
  • 需要更多的努力来实现。
  • 09-18 00:30