RESTAPI多租户安全性

RESTAPI多租户安全性,api,security,rest,oauth-2.0,Api,Security,Rest,Oauth 2.0,我有一个关于多租户环境中RESTful API和安全性的问题 假设您有一个端点:api/branchs/:branchId/accounts/:accountId 身份验证通过承载令牌(oauth2)完成。每个令牌包括一组与调用用户关联的声明。令牌中包含一个branchId声明,每个用户都属于一个分支 安全限制如下: GET请求的branchId应该与令牌声明中存储的branchId匹配 accountId应该是由branchId标识的分支内的有效帐户 问题是:以下哪种解决方案是正确的 维护端点

我有一个关于多租户环境中RESTful API和安全性的问题

假设您有一个端点:
api/branchs/:branchId/accounts/:accountId

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

安全限制如下:

  • GET请求的branchId应该与令牌声明中存储的branchId匹配
  • accountId应该是由
    branchId
    标识的分支内的有效帐户
  • 问题是:以下哪种解决方案是正确的

  • 维护端点:
    api/branchs/:branchId/accounts/:accountId
    。并进行必要的安全检查
  • 将端点更改为:
    api/accounts/:accountId
    ,从令牌获取branchId,然后执行其余的安全检查 该应用程序应该是多租户的。每个分支都是租户,每个用户只能访问与其单个分支关联的信息。
    谢谢

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

    赞成的论点:

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

  • 信息冗余:branchId位于URL上,并在令牌上加密
  • 再努力一点来实施
    +1、好问题!想知道答案吗well@DevarshDesai我需要对此采取行动,因此下面我对我的行动方针进行了评论。请告诉我你的想法。嘿,乔,希望你这一周过得愉快!我同意你和马克对另一个s.O答案的回答;我认为拥有这个描述性URL确实有利于缓存(无论您服务的用户数量如何,缓存都会带来巨大的收益);在信息冗余方面;也许这会对您有利(作为检查请求是否正确的两种不同方式的一种方法),但总而言之,您似乎有一个很棒的API设计。请让我知道您在实施过程中面临的障碍以及您从中吸取的教训!谢谢你抽出时间!:0)@DevarshDesai感谢您的反馈,我们已经实施了解决方案1)让我们看看进展如何。当然我可以发布一些更新!最好的。