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

配置AAD并受APIM保护的Azure函数应用重定向URL认证失败

问题描述

我有一个集成Microsoft Identity Provider(AAD应用)的Azure函数应用(V4版本),配置情况如下:

  • 入站流量启用受限公共网络访问,仅允许从选定虚拟网络和IP地址访问
  • 通过API Management(APIM)服务保护,直接访问函数应用域名会被拦截
  • 已禁用函数应用代理,带有Swagger UI页面,且为保护该页面启用了身份验证

当前遇到的问题:通过https://apimanager.com/api/swagger/ui访问Swagger UI时,页面会重定向到Microsoft登录服务器,完成用户名密码输入后,最终重定向到https://myfunction.azurewebsites.net/.auth/login/aad/callback并返回Forbidden错误。相关授权请求示例:

https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize?response_type=...&redirect_uri=https://myfunctionapp.azurewebsites.net/.auth/login/aad/callback&client_id=...&state=redir%3D%/api/swagger/ui
解决方案

要解决这个问题,需要调整AAD应用的回调配置,并通过APIM策略修改认证流程中的重定向逻辑,具体步骤如下:

1. 更新AAD应用的回调URL

在Azure AD门户中找到对应的AAD应用,添加APIM域名下的回调地址:

https://apimanager.com/.auth/login/aad/callback

同时保留原函数应用的回调地址,避免其他依赖场景受影响。

2. 配置APIM策略替换重定向URI

在APIM中,针对Swagger UI对应的API(或全局策略)添加以下策略,拦截授权请求并替换redirect_uri参数为APIM地址:

<inbound>
    <base />
    <!-- 替换AAD授权请求中的redirect_uri为APIM域名地址 -->
    <set-query-parameter name="redirect_uri" exists-action="override">
        <value>https://apimanager.com/.auth/login/aad/callback</value>
    </set-query-parameter>
    <!-- 回调后重写地址,将函数应用域名替换为APIM域名 -->
    <rewrite-uri template="@(context.Request.OriginalUrl.ToString().Replace("https://myfunction.azurewebsites.net", "https://apimanager.com"))" />
</inbound>

3. 配置APIM传递身份信息到函数应用

在APIM的后端策略中,确保将认证后的令牌或身份头传递给函数应用:

<backend>
    <base />
    <forward-request />
</backend>

4. 验证网络与身份配置

确认函数应用的网络规则已允许APIM的IP或虚拟网络访问,同时检查函数应用的AAD身份提供者配置,确保关联了更新后的回调URL。

核心逻辑说明

原问题的根源是认证流程中redirect_uri指向了受网络限制的函数应用域名,登录后直接访问该域名被拦截。通过将回调地址改为APIM域名,让APIM作为中间层处理认证回调,再转发到已被授权访问的函数应用,最终完成Swagger UI的身份验证跳转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:13:23