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

使用C#连接Dataverse API时遇AADSTS7000218错误求助

解决AADSTS7000218错误:请求体必须包含'client_assertion'或'client_secret'

问题原因

你的连接字符串同时混合了用户名密码凭据和应用注册AppId,导致Azure AD无法确定要使用的认证流:

  • 若使用用户名密码(ROPC流),无需指定AppId,AAD会默认使用内置的公共客户端ID;
  • 若指定AppId,AAD会认为你要使用客户端凭据流或需要验证应用身份,因此要求提供client_secret或client_assertion。

解决方案

根据你的需求选择以下一种方式修正连接字符串:

方式1:使用纯用户名密码认证(移除AppId)

如果要通过指定的用户名密码直接登录,删除连接字符串中的AppId参数即可:

static string connectionString = $@"
AuthType = OAuth;
Url = {url};
UserName = {userName};
Password = {password};
RedirectUri = http://localhost;
LoginPrompt=Auto;
RequireNewInstance = True";

方式2:使用应用注册的设备码流(移除用户名密码,启用公共客户端流)

如果要通过浏览器登录(更安全,避免硬编码密码),按以下步骤操作:

  1. 在Azure AD应用注册的身份验证页面,找到高级设置,将允许公共客户端流设置为是;
  2. 修改连接字符串,移除UserName和Password参数,保留AppId:
static string connectionString = $@"
AuthType = OAuth;
Url = {url};
AppId = {appId};
RedirectUri = http://localhost;
LoginPrompt=Auto;
RequireNewInstance = True";

运行代码后,控制台会输出一个链接和验证码,打开链接输入验证码即可完成登录。

方式3:使用机密客户端流(添加ClientSecret)

如果你的应用是服务器端应用(非控制台/桌面这类公共客户端),可以在应用注册中生成客户端密钥,然后在连接字符串中添加ClientSecret参数:

static string connectionString = $@"
AuthType = OAuth;
Url = {url};
AppId = {appId};
ClientSecret = {clientSecret};
RedirectUri = http://localhost;
LoginPrompt=Auto;
RequireNewInstance = True";

注意:此方式需要应用注册配置应用权限(而非委派权限),并完成管理员同意。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:16:01