You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure API Management网关中获取Azure B2C用户信息以过滤后端返回结果

Azure B2C保护的API Management响应过滤实现方案

前置准备

  • 确保Azure B2C的用户流/自定义策略已完成配置,发放的访问令牌中包含emails声明(B2C默认该声明为数组格式,首个元素为用户的主邮箱)
  • 确保Azure API Management(APIM)已完成B2C OAuth2.0授权服务对接,目标API已开启B2C令牌校验规则
  • 后端API返回的响应为包含email字段的JSON数组,若为嵌套结构可后续调整过滤规则适配

核心APIM策略配置

通过APIM的出站策略即可实现响应自动过滤,直接在目标API的策略配置页添加如下内容即可:

<policies>
    <inbound>
        <base />
        <!-- 校验B2C令牌,若已在全局/产品层级配置可直接省略本段 -->
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized.">
            <openid-config url="https://<你的B2C租户名>.b2clogin.com/<你的B2C租户名>.onmicrosoft.com/<你的用户流名称>/v2.0/.well-known/openid-configuration" />
            <required-claims>
                <claim name="iss" match="any">
                    <value>https://<你的B2C租户名>.b2clogin.com/<你的B2C租户ID>/v2.0/</value>
                </claim>
            </required-claims>
        </validate-jwt>
        <!-- 提取当前访问用户的邮箱存入变量 -->
        <set-variable name="currentUserEmail" value="@{
            var claims = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last()?.ParseJwt()?.Claims;
            if(claims == null || !claims.TryGetValue("emails", out var emails)) return "";
            return emails.FirstOrDefault() ?? "";
        }" />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
        <!-- 按当前用户邮箱过滤后端返回的JSON结果 -->
        <set-body>@{
            var currentEmail = (string)context.Variables["currentUserEmail"];
            if(string.IsNullOrEmpty(currentEmail)) return "[]";
            var response = context.Response.Body.As<JArray>();
            var filtered = response.Where(item => item.Value<string>("email") == currentEmail);
            return JArray.FromObject(filtered).ToString();
        }</set-body>
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

注意事项

  • 若后端返回的不是顶层JSON数组,只需修改出站策略里的JPath取值逻辑即可适配
  • 若你的B2C令牌中邮箱声明不是emails字段,对应修改入站策略里的声明取值键名即可
  • 邮箱匹配逻辑可自行调整,比如添加忽略大小写规则,只需要修改过滤条件里的判断逻辑即可

内容的提问来源于stack exchange,提问作者Walt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:09:05