azure-ad-b2c - 如何实现客户端 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 策略来获取他们的令牌。
- 他们使用他们的访问令牌来调用您的服务
- 您的服务在您的Azure AD B2C目录中创建一个Azure AD应用程序注册
- 它使用 Azure AD Graph API 执行此操作。您的 API 创建 App Reg,生成所需的 Application Secret 并将 AppId 和 Secret 返回给用户
- 你还需要一个 App Registration 来代表微服务本身,并给它上面的 App Reg 权限。
- 您的微服务需要信任 2 个令牌颁发者。Azure AD B2C 目录中的 Azure AD 令牌颁发者和 Azure AD B2C 令牌颁发者
- 现在,用户可以按照正常的 Azure AD 使用客户端凭据流,针对您的 Azure AD B2C 目录,并请求您的微服务 App Reg 的范围。
- 然后他们使用新令牌调用您的微服务
如果您使用 APIM 或类似的东西,它们可以配置为信任多个令牌颁发者。
总之,用户身份验证受 B2C 用户流/策略和 B2C 令牌颁发者的保护。基于 API 的访问受到 B2C 租户的 AAD 端点的保护。微服务由于在两种类型的身份验证机制之间共享,因此需要信任 2 个令牌颁发者。
推荐阅读
- python - typeError 帮助,plt.scatter 将我的 .csv 读取为真/假而不是数值
- javascript - 有没有办法在给定参考数组的情况下映射对象数组?
- java - Wildfly 10 中未找到 Stateless Bean 中的 JNDI
- apscheduler - re_schedule() 抛出 id not found 错误
- java - 选项卡 > 具有不同布局 + 操作的片段
- http-get - 如何修复由 http.GET(); 引起的“Guru Meditation Error”?
- python - ValueError:分类指标无法处理多类和多标签指标目标的混合
- php - 接受两个不同的模型实例作为函数参数 php
- security - 为什么通过 POST 请求向我的节点服务器发送表单数据(包括密码)是安全的?
- android - Android WebView 在 WebViewDelegate.getPackageId 处导致 RuntimeException