如何使用 Azure API 管理设计微服务架构中的身份验证和授权策略?

Posted

技术标签:

【中文标题】如何使用 Azure API 管理设计微服务架构中的身份验证和授权策略?【英文标题】:How to design authentication and authorization strategy in micro service architecture using Azure API management? 【发布时间】:2021-08-17 05:09:24 【问题描述】:

您好,我正在为我的应用程序设计微服务架构。我在 .Net 核心中开发了三个微服务。我打算在微服务前面添加 API 管理。当我开始阅读 API 管理文档时,我注意到它也可以处理 Azure AD 身份验证和授权。用户可以使用带有 PKCE 的授权代码流登录到前端 SPA 应用程序。我在下面添加的示例架构。

我在 Azure AD 中注册了三个应用程序,因为出于某些安全和权限原因,我希望将所有应用程序分开。 . 早些时候,我有自己的 .Net 核心应用程序作为 API 网关。所以我以前先获取网关应用程序的令牌,然后使用代表流量获取下游微服务的令牌。现在计划引入 API 管理。

如果我使用 API 管理,那么对于我的 SPA 应用程序,我应该得到 令牌但针对哪个微服务?

我能否在 azure AD 中为 Azure API 管理创建一个应用程序,我能否使用 SPA 获取此应用程序的令牌 使用授权代码流。然后我的 API 管理有 使用代表为每个微服务获取令牌的能力 流?

有人可以帮我设计这个架构吗?任何帮助将不胜感激。谢谢

【问题讨论】:

【参考方案1】:

如果我使用 API 管理,那么对于我的 SPA 应用程序,我应该获得令牌,但针对的是哪个微服务?

我认为您应该获得一个令牌并针对 APIM 进行授权。然后假设所有这些微服务都在 Azure 中,我将在 APIM 和每个单个 .net 核心应用程序之间使用托管标识。

我可以在 azure AD 中创建一个用于 Azure API 管理的应用吗?我可以吗? 使用授权代码流使用 SPA 获取此应用程序的令牌。然后 我的 API 管理是否有能力为每个微获取令牌 使用代流服务?

如果你问是否可能,那么答案是肯定的。


对不起,如果答案太宽泛,但这仅仅是因为问题也很宽泛。这种设置有很多可能性。例如,您可以使用令牌在一个授权服务器调用 APIM 中授权自己,然后在 APIM 内部调用另一个授权服务器以生成用于后端调用的令牌。或者您可以在 APIM 中建立匿名调用后端。或者您在没有令牌的情况下调用 APIM,然后在 APIM 内部根据某些参数生成一个令牌,然后使用它调用后端。正如您所见,场景几乎是无穷无尽的,您必须明确自己想要实现的目标,然后提出更具体的问题。

【讨论】:

非常感谢您花时间回答我的问题。在第一个选项中,我可以使用托管身份,但是对于在 azure ad 中注册的每个应用程序,我都分配了应用程序角色。那么通过使用托管身份,我可以在生成令牌时获得应用角色吗?在第二个选项中,如果我能够在 APIM 中为我的下游 API 生成令牌,那么我该怎么做。我无法获得足够的资源。你能建议我任何资源吗?谢谢

以上是关于如何使用 Azure API 管理设计微服务架构中的身份验证和授权策略?的主要内容,如果未能解决你的问题,请参考以下文章

六种常用的微服务架构设计模式(建议收藏)

小团队如何以“正确的方式”设计微服务架构?

使用 Azure Service Fabric 部署的微服务的 API 网关/代理模式

如何通过 Azure API 管理层向微服务添加 HTTPS/SSL 支持,而无需应用服务器支持 SSL?

「微服务架构」面向CTO的微服务设计模式:API网关前端的后端等

微服务架构的设计原则