我有一个微服务架构,其中一个单页应用程序访问三个不同的 API:
我通过 Microsoft 身份平台保护这些 API,因此我还需要服务主体。
我的第一种方法与我在博客或 MS 文档中找到的所有示例相匹配。
在这种情况下,我为客户端应用程序注册了一个应用程序,并为 API 注册了三个额外的应用程序:
这会产生以下影响:
- 每个 API 都有自己的受众。
- 我为每个应用程序获得了四个服务主体。
- 我得到了三个不同的地方,我必须管理用户分配给角色的位置。(例如:用户 A 可以从 API A 等读取资产...)
这可行,但也有一些问题:
- 其他管理允许哪个用户执行操作的管理员对他们必须分配角色的三个不同位置感到困惑。有一个中心位置会更好。
- 用户的角色没有放在 ID 令牌中,因为只有客户端应用程序的角色会去那里......但我不想再次在客户端应用程序中分配权限。
- 如果 API A 想要调用 API B 或 C,我需要两个用于其他 API 的访问令牌。
这让我想到了第二个想法:
在这里,我对所有 3 个 API 进行了一次注册。这已经解决了问题1和问题2。但它也给我一种奇怪的感觉,因为我从来没有发现其他人这样做。
我的 ID 令牌也没有告诉我角色,所以为了解决这个问题,我什至可以更进一步,为所有内容进行单个应用程序注册:
现在,一个注册公开了一个 API,也使用了这个 API。什么是可能的,似乎可以解决我的问题。我什至现在在我的 ID 令牌和访问令牌中获得用户的所有角色。
但是,这与我发现的所有其他示例相矛盾。
- 最后一种解决方案有哪些缺点?
- 我应该选择三种方法中的哪一种?



