使用 Azure AD B2C 保护 Azure API 管理 API

重要

自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息

了解如何将对 Azure API 管理 API 的访问限制为使用 Azure Active Directory B2C(Azure AD B2C)进行身份验证的客户端。 按照本文中的说明在 Azure API 管理中创建和测试入站策略,该策略仅限制对包含有效 Azure AD B2C 颁发的访问令牌的请求的访问。

先决条件

在开始之前,请确保已准备好以下资源:

获取 Azure AD B2C 应用程序 ID

在 Azure API 管理中使用 Azure AD B2C 保护 API 时,您需要为在 Azure API 管理中创建的 入站策略提供多个值。 首先,记录之前在 Azure AD B2C 租户中创建的应用程序的应用程序 ID。 如果您使用自己创建的应用程序来满足先决条件,请使用 webapp1 的应用程序 ID。

若要在 Azure AD B2C 租户中注册应用程序,可以使用新的统一 应用注册 体验或旧 版应用程序 体验。 详细了解 新的注册体验

  1. 登录到 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单切换到你的 Azure AD B2C 租户。
  3. 在左窗格中,选择 Azure AD B2C。 或者,可以选择 “所有服务 ”,然后搜索并选择 “Azure AD B2C”。
  4. 选择 “应用注册”,然后选择“ 拥有的应用程序 ”选项卡。
  5. 记录 Webapp1 或之前创建的其他应用程序的“应用程序”(客户端)ID 列中的值。

获取令牌颁发者终结点

接下来,获取某个 Azure AD B2C 用户流的已知配置 URL。 还需要 Azure API 管理中要支持的令牌颁发者终结点 URI。

  1. Azure 门户中,导航到您的 Azure AD B2C 租户。

  2. 在“策略”下,选择“用户流”。

  3. 选择现有策略(例如 ,B2C_1_signupsignin1),然后选择“ 运行用户流”。

  4. 记录页面顶部附近的“运行用户流”标题下显示的超链接中的 URL。 此 URL 是用户流的 OpenID Connect 已知发现终结点,在下一节中配置 Azure API 管理中的入站策略时,你将使用它。

    Azure 门户的“运行用户流”页上已知 URI 超链接的屏幕截图。

  5. 选择超链接以转到 OpenID Connect 已知配置页。

  6. 在浏览器中打开的页面上,记录 issuer 值。 例如:

    https://<tenant-name>.b2clogin.cn/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/

    在下一部分中,在 Azure API 管理中配置 API 时,你将使用此值。

你现在应已记录两个要在下一部分中使用的 URL:OpenID Connect 已知配置终结点 URL 和颁发者 URI。 例如:

https://<tenant-name>.b2clogin.cn/<tenant-name>.partner.onmschina.cn/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration
https://<tenant-name>.b2clogin.cn/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/

在 Azure API 管理中配置入站策略

现在可以在 Azure API 管理中添加用于验证 API 调用的入站策略。 通过添加 JSON Web 令牌(JWT)验证 策略来验证访问令牌中的访问群体和颁发者,可以确保仅接受具有有效令牌的 API 调用。

  1. Azure 门户中,转到 Azure API 管理实例。

  2. 选择“API”。

  3. 选择要使用 Azure AD B2C 保护的 API。

  4. 选择“设计”选项卡。

  5. “入站处理”下,选择 </> 打开策略代码编辑器。

  6. 将以下 <validate-jwt> 标记放在 <inbound> 策略中,然后执行以下步骤:

    a。 使用策略的已知配置 URL 来更新 url 元素中的 <openid-config> 值。
    b. 更新 <audience> 元素,使其包含你之前在 B2C 租户中创建的应用程序的应用程序 ID(例如,webapp1)。
    选项c. 使用您之前记录的令牌颁发者终结点来更新 <issuer> 元素。

    <policies>
        <inbound>
            <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
                <openid-config url="https://<tenant-name>.b2clogin.cn/<tenant-name>.partner.onmschina.cn/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration" />
                <audiences>
                    <audience>00001111-aaaa-2222-bbbb-3333cccc4444</audience>
                </audiences>
                <issuers>
                    <issuer>https://<tenant-name>.b2clogin.cn/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/</issuer>
                </issuers>
            </validate-jwt>
            <base />
        </inbound>
        <backend> <base /> </backend>
        <outbound> <base /> </outbound>
        <on-error> <base /> </on-error>
    </policies>
    

支持多个应用程序和发行者

多个应用程序通常与单个 REST API 交互。 若要使 API 能够接受适用于多个应用程序的令牌,请将其应用程序 ID 添加到 <audiences> Azure API 管理入站策略中的元素。

<!-- Accept tokens intended for these recipient applications -->
<audiences>
    <audience>00001111-aaaa-2222-bbbb-3333cccc4444</audience>
    <audience>11112222-bbbb-3333-cccc-4444dddd5555</audience>
</audiences>

同样,若要支持多个令牌的颁发者,请将它们的终结点 URI 添加到 Azure API 管理入站策略中的 <issuers> 元素。

<!-- Accept tokens from multiple issuers -->
<issuers>
    <issuer>https://<tenant-name>.b2clogin.cn/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/</issuer>
    <issuer>https://login.partner.microsoftonline.cn/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/</issuer>
</issuers>

迁移到 b2clogin.cn

如果您有一个 Azure API 管理 API 用于验证由旧login.partner.microsoftonline.cn终结点颁发的令牌,则应迁移此 API 和调用它的应用程序以使用由b2clogin.cn颁发的令牌。

可以按照此常规过程执行分阶段迁移:

  1. 在 Azure API 管理入站策略中添加对由 b2clogin.cn 和 login.partner.microsoftonline.cn 颁发的令牌的支持。
  2. 逐个更新应用程序,从 b2clogin.cn 终结点获取令牌。
  3. 在所有应用程序已从 b2clogin.cn 正确获取令牌之后,请从 API 中移除对 login.partner.microsoftonline.cn 颁发的令牌的支持。

以下示例 Azure API 管理入站策略演示如何接受由 b2clogin.cn 和 login.partner.microsoftonline.cn 颁发的令牌。 此外,该策略还支持来自两个应用程序的 API 请求。

<policies>
    <inbound>
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
            <openid-config url="https://<tenant-name>.b2clogin.cn/<tenant-name>.partner.onmschina.cn/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration" />
            <audiences>
                <audience>00001111-aaaa-2222-bbbb-3333cccc4444</audience>
                <audience>11112222-bbbb-3333-cccc-4444dddd5555</audience>
            </audiences>
            <issuers>
                <issuer>https://login.partner.microsoftonline.cn/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/</issuer>
                <issuer>https://<tenant-name>.b2clogin.cn/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/</issuer>
            </issuers>
        </validate-jwt>
        <base />
    </inbound>
    <backend> <base /> </backend>
    <outbound> <base /> </outbound>
    <on-error> <base /> </on-error>
</policies>

后续步骤

有关 Azure API 管理策略的其他信息,请参阅 Azure API 管理策略参考索引

有关将基于 OWIN 的 Web API 及其应用程序迁移到 b2clogin.cn 的信息,请参阅 将基于 OWIN 的 Web API 迁移到 b2clogin.cn