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

如何在Flask中配置Entra ID联合身份凭证认证

解决联合身份凭证对接Entra ID应用的令牌获取错误AADSTS7000218

你在对接使用联合身份凭证的Entra ID应用时,未使用客户端密钥,调用接口获取认证令牌时触发以下错误:

invalid_client
AADSTS7000218: The request body must contain the following parameter: 'client_assertion' or 'client_secret'.

以下是基于你用到的Python WebApp示例项目的调整方案:

核心问题

联合身份凭证模式下,Azure AD要求用**客户端断言(client_assertion)**替代客户端密钥完成身份验证,你的代码目前未正确生成并传入该参数,因此触发缺失参数的错误。

具体调整步骤

1. 确认Entra ID应用的联合身份凭证配置

  • 确保已在Entra ID应用的「联合身份凭证」页面添加了正确的身份提供者,配置好受众、发行者等参数
  • 记录凭证对应的**发行者(issuer)和受众(audience)**信息

2. 生成客户端断言

在Python代码中生成符合要求的JWT作为client_assertion:

  1. 先安装依赖:
pip install pyjwt cryptography
  1. 编写生成断言的代码:
import jwt
from datetime import datetime, timedelta

# 替换为你的实际配置
client_id = "你的Entra ID应用客户端ID"
issuer = "联合身份凭证的发行者"
audience = "https://login.microsoftonline.com/你的租户ID/v2.0"
private_key_path = "你的私钥文件路径"

# 读取私钥
with open(private_key_path, "r") as f:
    private_key = f.read()

# 生成JWT断言
payload = {
    "aud": audience,
    "iss": issuer,
    "sub": client_id,
    "exp": datetime.utcnow() + timedelta(minutes=10),
    "iat": datetime.utcnow()
}

client_assertion = jwt.encode(payload, private_key, algorithm="RS256")

3. 调整令牌请求逻辑

替换原有的客户端密钥请求,传入client_assertion和对应类型参数:

import requests

token_url = f"https://login.microsoftonline.com/你的租户ID/oauth2/v2.0/token"
request_data = {
    "grant_type": "client_credentials",
    "client_id": client_id,
    "scope": "你要访问的API范围(比如https://graph.microsoft.com/.default)",
    "client_assertion": client_assertion,
    "client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer"
}

response = requests.post(token_url, data=request_data)
if response.status_code == 200:
    access_token = response.json().get("access_token")
else:
    print(f"请求失败: {response.text}")

4. 适配原示例项目

如果基于ms-identity-python-webapp示例修改:

  • 找到示例中获取令牌的代码段(通常在auth.py或同类文件中)
  • 移除原有的client_secret参数,替换为上述的客户端断言生成和传入逻辑
  • 配置文件中存储私钥路径、发行者、受众等参数,而非客户端密钥

验证配置

调整完成后重新运行代码:

  • 成功获取access_token即表示配置正确
  • 若仍报错,检查以下内容:
    • 私钥是否与Entra ID应用中联合身份凭证的公钥匹配
    • JWT payload中的iss、aud、sub参数是否与配置一致
    • 请求的scope是否已授权给Entra ID应用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:55:05