已启用身份验证的Azure App Service非交互式身份验证问题
非交互式调用Azure App Service托管Web API的解决方案
针对你遇到的问题,核心原因是当前App Service的身份验证配置偏向交互式场景,需要调整配置并确保Token的正确性,具体步骤如下:
1. 修改App Service身份验证的未认证请求处理方式
在Azure门户的App Service「设置」-「身份验证」页面,将Unauthenticated requests的设置从Return HTTP 302 Found (Redirect to identity provider)改为Return HTTP 401 Unauthorized。
- 原配置是为浏览器类交互式场景设计的,会自动重定向到登录页;改为401后,App Service Auth模块才会正确解析请求中的Bearer Token,而非尝试重定向。
2. 确保托管标识获取的Token受众正确
使用托管标识获取Token时,必须指定正确的受众(Audience),即你的Web API的应用ID URI或客户端ID。例如,获取Token的请求中,scope参数应设置为:
api://<你的Web API客户端ID>/.default
- 如果受众不正确,即使Token有效,App Service也会判定权限不足。
3. 关于AppServiceAuthSession Cookie
非交互式调用不需要这个Cookie。该Cookie是交互式登录后,App Service Auth模块生成的会话凭证,仅用于浏览器维持登录状态。直接使用正确的Bearer Token放在Authorization: Bearer <token>请求头中即可。
4. 验证Token有效性
可以解码Token检查以下内容:
aud(受众)字段是否匹配你的Web API的应用ID URI或客户端IDiss(颁发者)是否为Azure AD的合法颁发地址(如https://login.microsoftonline.com/<租户ID>/v2.0)- Token是否未过期(
exp字段为过期时间戳)
内容的提问来源于stack exchange,提问作者Mo B.
相关产品推荐
相关产品推荐

