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

Python笔记本通过Azure Entra访问API遇登录页面问题排查

问题

我们的API部署在Azure Entra身份提供者之后,在浏览器中调用该端点会先重定向至Microsoft登录页面。现在希望开发者能在Python笔记本中交互式使用该API,避免返回登录页面的HTML内容。我们尝试使用MSAL获取身份验证令牌,但端点仍返回登录页面,请问问题出在哪里?

笔记本代码

import requests
from msal import PublicClientApplication

# Settings
CLIENT_ID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # <- SWA身份提供者应用注册的客户端ID
TENANT_ID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
SCOPE = ["api://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/user_impersonation"]
API_URL = f"https://example/api/v1/resources/resource"

# 初始化MSAL公共客户端
app = PublicClientApplication(
    CLIENT_ID,
    authority=f"https://login.microsoftonline.com/{TENANT_ID}",
)

flow = app.initiate_device_flow(scopes=SCOPE)
print(flow["message"])  # 向用户提供登录说明
result = app.acquire_token_by_device_flow(flow)

if "access_token" in result:
    token = result["access_token"]
    # 调用API
    headers = {"Authorization": f"Bearer {token}"}
    
    response = requests.get(API_URL, headers=headers)

    if response.status_code == 200:
        print("API响应:", response.text) # <- 这里返回的是登录页面HTML,而非资源内容
    else:
        print("访问API失败:", response.status_code, response.text)
else:
    print("获取令牌失败:", result.get("error_description"))

可能的原因及解决办法

  • API身份验证配置未启用Bearer令牌支持:检查API的Azure Entra保护设置,确认是否开启了OAuth 2.0 Bearer令牌验证。如果仅配置了浏览器重定向类的认证(如OpenID Connect授权码流),API会忽略Authorization请求头,直接触发登录重定向。
  • 令牌受众与API不匹配:用JWT解码工具查看获取到的access_token,确认其中的aud声明是否与API的应用ID URI(即api://<你的API应用ID>)完全一致。如果不一致,说明scope配置错误或请求的资源目标有误。
  • 客户端应用权限未获授权:在Azure Entra中,确认代码里CLIENT_ID对应的应用注册,是否已被授予该API的user_impersonation权限,且该权限已完成管理员同意(若为租户级权限)。
  • API URL指向错误:确认API_URL是否直接指向受保护的API端点,而非前端页面地址。如果是前端页面URL,即使携带令牌也会触发登录重定向逻辑。
  • Authorization头格式错误:检查请求头是否严格遵循Bearer <token>格式,无拼写错误或多余空格。可打印完整headers确认格式正确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:16:08