我们有一个基于微服务的堆栈,托管在 Nginx 后面。我们使用 Keycloak 来验证用户身份。作为 Keycloak 中的身份提供商,我们之前已成功使用 OpenID Connect 并注册了 MS Entra 应用程序。这需要配置客户端 ID 和客户端密钥,然后可以在 MS Entra 应用程序级别向用户授予必要的权限,并且在通过 Keycloak 进行身份验证后可以在我们的应用程序中解析这些权限。
现在,我们希望转而使用 Azure 托管身份(客户授权),而不是需要客户端 ID 和密钥的 MS Entra 应用程序。我们的应用程序的哪些部分需要切换或修改? Keycloak 还有意义吗?我无法找到任何解释如何启用此功能的资源。我们所有的微服务都容器化在 Azure VM 实例中。我们不使用 K8s。
我们阅读了相同的在线资源。
听起来你的架构是正确的:
AS 负责发行正确的令牌 - 特别是对于您的 API。同时,您的 AS 可以连接到一个或多个管理用户身份验证的 IDP。
在我看来,您只需要更改 IDP 即可。如果我有误解,请纠正我,我会更新我的答案。
您唯一需要做的工作是在 Keycloak 中。这不会对您的 API 和客户端产生影响。您只需要确保 Keycloak 令牌保持不变即可。
特别是,为访问令牌颁发的任何用户身份都不得更改。有时,称为帐户链接的过程可以确保这一点。
困难的身份验证要求
OAuth 使您能够满足这些要求,例如,如果另一个业务合作伙伴希望其用户使用其 SAML 2.0 系统进行身份验证,那么您只需在 Keycloak 中做一些工作即可。