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

如何基于Azure B2C为Azure应用程序网关实现SSO保护多后端服务

解决方案:通过Azure B2C为Azure应用程序网关实现统一SSO

核心前提

Azure应用程序网关本身不提供内置的SSO/OAuth2.0认证能力,必须借助额外组件实现网关入口的统一身份验证,同时将用户信息传递到后端App Service。以下是两种实用落地方案:

方案一:Azure Front Door(AFD) + Azure B2C(推荐)

AFD支持直接集成Azure B2C实现全局SSO,可作为应用程序网关的前置入口统一处理认证:

  • 步骤1:配置AFD与Azure B2C集成

    • 为AFD绑定自定义域名和SSL证书
    • 给AFD路由规则启用「身份验证」,选择Azure B2C作为身份提供者,配置租户ID、应用注册客户端ID及对应用户流(如登录/注册流)
    • 设置会话管理参数(如Cookie过期时间)
  • 步骤2:将AFD流量转发到应用程序网关

    • 在AFD后端池添加应用程序网关的公网IP或域名
    • 配置路径匹配规则(如/orders/*、/warranty/*),确保流量正确路由到网关
  • 步骤3:传递用户认证信息到后端

    • 在AFD认证设置中启用「将用户声明转发到后端」,勾选需要传递的字段(如objectId、email、displayName)
    • 这些声明会以HTTP请求头形式(如X-MS-AAD-OBJECT-ID、X-MS-AAD-EMAIL)经网关传递给App Service,后端可直接读取这些请求头实现授权逻辑

方案二:Azure API Management(APIM) + Azure B2C

如果后端以API服务为主,APIM是更贴合的选择:

  • 步骤1:配置APIM与Azure B2C集成

    • 在APIM中创建API,将后端指向应用程序网关的路由地址
    • 为API添加「OAuth 2.0」认证策略,关联Azure B2C的用户流和应用注册信息
    • 配置JWT令牌验证策略,拦截未授权请求
  • 步骤2:传递用户声明到后端

    • 在APIM入站策略中添加逻辑,从JWT令牌提取所需用户属性并写入请求头,示例策略片段:
      <set-header name="X-USER-OBJECT-ID" exists-action="override">
          <value>@{return context.Request.Headers.GetValueOrDefault("Authorization").Split(' ')[1].AsJwt()?.Claims.FirstOrDefault(c => c.Type == "oid")?.Value;}</value>
      </set-header>
      
  • 步骤3:将APIM设为网关前置入口

    • 调整DNS记录,将用户请求指向APIM,再由APIM转发到应用程序网关

备选方案:自定义认证代理容器

如果需要完全自定义认证逻辑,可在应用程序网关和后端之间部署OAuth2.0认证代理(如OAuth2 Proxy、Keycloak Gatekeeper),部署在AKS中:

  • 配置代理与Azure B2C集成,处理登录/授权流程
  • 将应用程序网关的后端池指向认证代理的服务地址
  • 代理验证通过后,将用户声明添加到请求头再转发到对应App Service

关键注意事项

  • 会话安全:确保AFD/APIM的会话Cookie配置HttpOnly、Secure、SameSite等安全属性
  • WAF防护:可保留应用程序网关的WAF,或在AFD层面启用WAF规则实现多层防护
  • 声明按需传递:仅转发后端授权所需的用户属性,避免敏感信息泄露
  • 验证测试:用Postman、curl等工具测试认证流程,检查请求头是否包含预期用户信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:06:27