首页 > 解决方案 > 如何实现客户端 API 访问受 Azure AD B2C 保护的资源

问题描述

我目前有一个 Angular SPA 应用程序,它使用 Azure B2c 授权用户,并使用令牌传递给微服务以获取/设置所有功能。

我现在想构建一个 API,客户端可以使用它来访问自己的微服务(直接或通过 Azure API 管理)。

我找不到任何好的文档 - 但理想情况下,我希望用户能够在我们的应用程序中创建“应用程序”,为他们提供 API 密钥和秘密,然后他们可以使用这些来交换 JWT 令牌它们可以传递给微服务 - 理想情况下生成的 Azure B2C 以便它可以使用我们现在正在执行的相同身份验证。将密钥/秘密转换为令牌的 API 需要是非交互式的。

Azure AD B2C 现在支持 ROPC,但这似乎不适合,因为它只会使用我们不想要的用户用户名和密码(因为我希望用户能够撤消访问权限)。 https://docs.microsoft.com/en-us/azure/active-directory-b2c/configure-ropc?tabs=applications

我可以在 Azure B2c 外部构建这一切 - 拥有自己的身份提供程序,为 API 生成令牌,并在所有微服务更改管道上进行两个身份验证验证 - 一个用于 Azure B2c 令牌,一个用于自己的 API 身份验证,但希望有是一种更精简的方法。

有什么建议么?

标签: azure-ad-b2c

解决方案


在这种情况下,您将按如下方式进行架构:

  1. 用户登录您的门户。他们使用 Azure AD B2C 策略来获取他们的令牌。
  2. 他们使用他们的访问令牌来调用您的服务
  3. 您的服务在您的Azure AD B2C目录中创建一个Azure AD应用程序注册
  4. 它使用 Azure AD Graph API 执行此操作。您的 API 创建 App Reg,生成所需的 Application Secret 并将 AppId 和 Secret 返回给用户
  5. 你还需要一个 App Registration 来代表微服务本身,并给它上面的 App Reg 权限。
  6. 您的微服务需要信任 2 个令牌颁发者。Azure AD B2C 目录中的 Azure AD 令牌颁发者和 Azure AD B2C 令牌颁发者
  7. 现在,用户可以按照正常的 Azure AD 使用客户端凭据流,针对您的 Azure AD B2C 目录,并请求您的微服务 App Reg 的范围。
  8. 然后他们使用新令牌调用您的微服务

如果您使用 APIM 或类似的东西,它们可以配置为信任多个令牌颁发者。

总之,用户身份验证受 B2C 用户流/策略和 B2C 令牌颁发者的保护。基于 API 的访问受到 B2C 租户的 AAD 端点的保护。微服务由于在两种类型的身份验证机制之间共享,因此需要信任 2 个令牌颁发者。


推荐阅读