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

Azure App Service上FastAPI应用MSAL认证401问题排查咨询

排查Azure App Service上FastAPI + MSAL身份验证401错误的配置项

问题描述

已为部署在Azure App Service上的FastAPI应用完成Azure AD应用注册,使用MSAL能成功获取令牌,但调用API时返回401错误,推测令牌未获得API访问权限,需排查以下配置项:

客户端代码(存在错误)

import msal
import requests

client_id = 'your-client-id'
client_secret = 'your-client-secret'
tenant_id = 'your-tenant-id'
authority = f"https://login.microsoftonline.com/{tenant_id}"
scope = ["https://management.azure.com/.default"]

app = msal.ConfidentialClientApplication(
    client_id,
    authority=authority,
    client_credential=client_secret
)

result = app.acquire_token_for_client(scopes=scope)

if "access_token" in result:
    print("Access token acquired:", result["access_token"])
    headers = {
                'Authorization': f'Bearer {access_token}',
                'Content-Type': 'application/json'
    }
else:
    print("None Found")
    headers={}
    
# returns a 401
response = requests.get(
                url="myapi.com/endpoint",
                headers=headers,
).json()

核心排查项

1. 令牌请求Scope是否匹配API权限

  • 当前代码使用的scope是Azure管理API的权限,必须替换为你的FastAPI应用注册的应用ID URI + .default,格式为["api://<你的API应用ID>/.default"]
  • 确认API应用注册中的“应用ID URI”配置正确,无拼写错误

2. 客户端应用是否已获得API的应用权限

  • 登录Azure门户,找到用于获取令牌的客户端应用注册,进入「API权限」页面
  • 检查是否已添加你的FastAPI对应的API应用权限,权限类型必须为应用权限(适配客户端凭证流),且已完成「授予管理员同意」操作

3. FastAPI的身份验证配置是否正确

  • 确保FastAPI中配置的受众(audience)与令牌的aud声明完全一致(即API应用的应用ID URI)
  • 验证令牌颁发者(iss)与FastAPI配置的issuer匹配,v2端点格式通常为https://login.microsoftonline.com/<租户ID>/v2.0

4. 解析令牌验证关键声明

  • 本地解析JWT令牌,检查以下核心声明:
    • aud:必须等于你的API应用ID URI
    • roles:应用权限模式下,应包含已授予的权限名称
    • exp:确认令牌未过期

5. 代码变量错误修正

  • 代码中存在变量未定义的问题:获取到result["access_token"]后,未赋值给access_token变量就直接使用,导致Authorization头无效。修正后的代码片段:
    if "access_token" in result:
        access_token = result["access_token"]
        print("Access token acquired:", access_token)
        headers = {
                    'Authorization': f'Bearer {access_token}',
                    'Content-Type': 'application/json'
        }
    

6. App Service内置身份验证配置(若启用)

  • 若App Service启用了内置身份验证,确认:
    • 身份验证提供商为Azure AD,且租户ID、应用ID与API应用注册一致
    • 已设置为「需要身份验证」,避免匿名请求绕过验证逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:42:16