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

如何为两个Azure App Service配置同一身份提供商实现正常访问

问题背景
  • Azure中托管了2个独立App Service资源:1个ASP.NET网站、1个Web API
  • 网站已经通过Authentication blade配置了身份提供程序,强制用户登录后才可访问所有页面
  • 网站现有身份验证配置截图:
    App Service Authentication
  • 尝试给Web API复用目录中同一个现有应用注册配置身份验证后,网站侧无法正常访问任何Web API接口
  • Web API现有身份验证配置截图:
    App Service

核心原因

两个App Service直接绑定同一个Azure AD应用注册时,App Service内置的Easy Auth中间件默认会严格校验访问令牌的aud(受众)声明。前端用户登录后获取的令牌默认受众为前端站点本身,直接携带该令牌请求API时,API侧会判定令牌受众不匹配,直接返回401未授权错误,导致接口无法访问。


推荐配置方案(生产环境适用,符合安全规范)

不要给前端站点和API复用同一个应用注册,需要为两个服务分别配置独立的应用注册,再通过委托权限实现单点登录和合法接口调用,两个App Service各自绑定对应的应用注册即可:

    1. 为Web API创建独立应用注册
    • 进入Azure AD应用注册页面,新建专用于API服务的应用注册,记录生成的应用程序(客户端) ID
    • 进入该API应用注册的「公开API」菜单,设置应用ID URI(默认格式为api://<API客户端ID>,也可绑定自定义域名)
    • 添加一个委托权限,例如命名为User.Access,用于授权前端站点访问API资源
    1. 给前端原有应用注册配置API访问权限
    • 进入前端网站绑定的原有应用注册页面,打开「API权限」菜单,选择「添加权限」-「我的API」,选中上一步创建的API应用注册,勾选刚才添加的委托权限
    • 同租户部署场景下,直接点击「授予管理员同意」完成权限生效配置
    1. 调整前端登录令牌请求逻辑
      前端触发用户登录时,需要将令牌请求的scope(作用域)参数设置为API暴露的权限值,格式为<API应用ID URI>/<权限名>,例如api://0000-0000-0000/User.Access,这样登录后拿到的令牌才是API认可的合法访问令牌
    1. 分别为两个App Service配置Easy Auth规则
    • 前端App Service保持原有身份验证配置即可,绑定前端自身的应用注册,登录成功后会自动缓存对应作用域的访问令牌
    • Web API的身份验证配置绑定专门为API创建的应用注册,将「未认证请求的处理逻辑」设置为返回401未授权,不要开启登录页面跳转,API侧会自动完成令牌合法性、受众匹配性校验
    1. 前端调用API时携带合法令牌
      前端发起API请求时,从当前登录会话中取出对应API作用域的访问令牌,放到请求头的Authorization字段中,格式为Bearer <访问令牌内容>,API校验通过后就会正常响应请求。

临时快速修复方案(仅测试环境适用)

如果不想新增应用注册,一定要复用同一个应用注册,可以通过调整API侧的受众校验规则快速恢复访问:

  1. 进入Web API的App Service身份验证配置页,找到已绑定的Microsoft身份提供程序,打开高级编辑选项
  2. 在「允许的令牌受众」配置项中,添加前端站点对应的应用客户端ID、应用ID URI值
  3. 保存配置后重启App Service,此时API就会认可前端拿到的同应用注册签发的令牌,不会再返回权限错误

注意:该方案没有做服务间的权限隔离,不符合最小权限安全原则,禁止在生产环境使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:36:10