桌面C#应用使用MSAL.NET实现Azure AD静默认证遇AADSTS7000218错误
Azure AD静默认证(MSAL.NET 4.72.2)调用失败排查
问题描述
我在C#桌面应用中实现Azure AD静默认证,使用MSAL.NET 4.72.2版本,调用代码如下:
authResult = await app.AcquireTokenByUsernamePassword( scopes, ClientApp.SafeStorage.DecryptString(ClientApp.Username), ClientApp.SafeStorage.DecryptString(ClientApp.Pwd)) .ExecuteAsync(CancellationToken.None) .ConfigureAwait(true);
其中ClientApp.Username和ClientApp.Pwd为用户名与密码,该账户未启用MFA,但调用失败,报错信息:
Microsoft.Identity.Client.MsalServiceException: '配置问题导致认证失败 - 请查看服务器返回的错误信息了解详情。你可以在应用注册门户修改配置。原始异常: AADSTS7000218: 请求体必须包含以下参数: 'client_assertion' 或 'client_secret'。
Trace ID: 50d49e42-d5e4-4cd8-984d-540c3d538a00
Correlation ID: 7874e878-1084-4f32-9679-69030a2dbed8
Timestamp: 2022-11-02 23:09:46Z'
错误原因
你使用的用户名密码流(ROPC)要求Azure AD应用必须提供客户端凭据(client_secret或client_assertion),即使是桌面端公共客户端应用,也需要配置该凭据才能通过认证。
解决步骤
- 在Azure门户的应用注册页面,找到你的应用,进入证书和密码选项卡,创建并保存一个客户端密码(client secret)。
- 修改MSAL应用初始化代码,添加客户端密码参数:
var app = PublicClientApplicationBuilder .Create("你的客户端ID") .WithClientSecret("你创建的客户端密码") .WithAuthority(AzureCloudInstance.AzurePublic, "你的租户ID/域名") .Build();
- 确认应用注册的身份验证选项卡中,已开启“允许公共客户端流”,同时检查API权限配置正确并已获取管理员同意(若涉及需要权限)。
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

