Oauth 2.0 在microserice架构中,我需要多少应用程序注册

Oauth 2.0 在microserice架构中,我需要多少应用程序注册,oauth-2.0,azure-active-directory,microsoft-identity-platform,Oauth 2.0,Azure Active Directory,Microsoft Identity Platform,我有一个微服务架构,其中一个单页应用程序访问三个不同的API: 我通过Microsoft Identity Platform保护这些API,因此我还需要服务主体。 我的第一种方法与我在博客或MS文档中找到的所有示例相匹配。 在本例中,我为客户端应用注册了一个应用程序,为API注册了三个附加应用程序: 这有以下影响: 每个API都有自己的受众 每个应用程序有四个服务主体 我有三个不同的地方需要管理角色的用户分配。(例如:用户A可以从API A等读取资产) 这是可行的,但也存在一些问题: 其他管

我有一个微服务架构,其中一个单页应用程序访问三个不同的API:

我通过Microsoft Identity Platform保护这些API,因此我还需要服务主体。
我的第一种方法与我在博客或MS文档中找到的所有示例相匹配。
在本例中,我为客户端应用注册了一个应用程序,为API注册了三个附加应用程序:

这有以下影响:

  • 每个API都有自己的受众
  • 每个应用程序有四个服务主体
  • 我有三个不同的地方需要管理角色的用户分配。(例如:用户A可以从API A等读取资产)
  • 这是可行的,但也存在一些问题:

  • 其他管理允许哪个用户做什么的管理员对他们必须分配角色的三个不同位置感到困惑。最好有一个中心位置
  • 用户的角色不会放在ID令牌中,因为只有客户端应用程序的角色才会放在ID令牌中。。。但我不想再次在客户端应用程序中分配权限
  • 如果API A想要调用API B或C,我需要两个用于其他API的访问令牌
  • 这让我想到了第二个想法:

    在这里,我为所有3个API注册了一次。这已经解决了问题1和问题2。但这也给了我一种奇怪的感觉,因为我从未发现其他人这样做。
    此外,我的ID令牌没有告诉我角色,因此要解决这一问题,我甚至可以更进一步,为所有内容注册一个应用程序:

    现在,一次注册会公开一个API并使用该API。一些可能的事情,似乎能解决我的问题。现在,我甚至可以在ID令牌和访问令牌中获得用户的所有角色

    然而,这与我发现的所有其他例子都是矛盾的

  • 最后一种解决方案有哪些缺点
  • 我应该选择三种方法中的哪一种
  • 最后一种解决方案有哪些缺点

    我想到的一件事是,您希望API A能够在MS Graph API中编辑数据,因此您授予其应用程序读/写目录数据的权限。 现在,通过共享应用程序注册,API B和API C也获得了此权限

    因此,在第二和第三种选择中,可能会违反最低特权原则。 但正如您所注意到的,它确实使管理这些API变得更加容易

    第三个选项确实为用户打开了一扇门,让用户可以从API中获取您可能希望代表当前用户调用的任何API的访问令牌。 因此,如果您希望API A代表用户通过MS Graph API编辑用户,则必须要求应用程序的读/写用户授权权限(范围)。 这将允许用户也从您的前端获取此令牌,即使这不是有意的。 现在,由于令牌的权限是基于用户的权限限制的,因此他们将无法执行任何其他情况下无法执行的操作,因此这可能不是一个显著的缺点

    我应该选择三种方法中的哪一种

    与许多事情一样,这取决于:)

    如果您希望您的服务具有绝对最低权限,请选择1

    如果你想要更简单的管理,我会选择选项3而不是选项2。
    关于选项3,我在上面提到了一件事,但它不允许特权升级。

    Mhh。。。也许最后一个选择对我来说是最好的。我不需要调用任何MS API。我的应用程序完全独立于microsoft产品。我只是喜欢身份平台,所以我很高兴我可以选择1。。。我只需要为我们公司的用户提供SSO。啊,另一件事是,如果你想限制只有API B可以调用API C,那么你也需要使用第一个选项。好的,但假设API A是唯一一个代表用户调用图形的。在这种情况下,我必须使用代表流,以代表调用用户将为API a颁发的令牌与另一个图形访问令牌交换?这就是你在回答的第一句话中的意思,对吗?实际上我指的是应用程序权限,因此客户端凭据流动,这将允许API调用Graph API本身,而令牌中没有用户信息。但第一部分也可以应用于“代表”场景。OBO更受限制,因为它需要用户在场,令牌的权限将限于用户的权限。好的,那么对于客户端凭据流,您的意思是,API本身具有客户端应用程序的客户端机密(也添加了API的作用域)但也可以在图形中添加一些权限。因此,通过这种方式,API本身可以接收一个访问令牌来访问图形(没有任何用户参与)?