访问Dynamics CRM API时个人账号登录失败,已做配置仍未解决
问题描述
访问Dynamics CRM API时触发错误:
"You can't sign in here with a personal account. Use your work or school account instead"
已尝试的操作:
- 设置应用支持的账号类型为「所有Microsoft账户用户」
- 在Manifest中修改配置:
"allowPublicClient": true, "signInAudience": "AzureADandPersonalMicrosoftAccount" - 完成权限的管理员同意
当前使用的认证代码:
#region Authentication var authBuilder = PublicClientApplicationBuilder.Create(clientId) .WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs) .WithRedirectUri(redirectUri) .Build(); var scope = resource + "/.default"; string[] scopes = { scope }; AuthenticationResult token = authBuilder.AcquireTokenInteractive(scopes).ExecuteAsync().Result; #endregion Authentication
解决步骤
1. 修正认证Authority配置
当前代码里的AadAuthorityAudience.AzureAdMultipleOrgs仅适配Azure AD工作/学校账户,不包含个人Microsoft账户。需要将Authority切换为支持全类型Microsoft账户的参数:
var authBuilder = PublicClientApplicationBuilder.Create(clientId) .WithAuthority(AadAuthorityAudience.AzureAdAndPersonalMicrosoftAccount) .WithRedirectUri(redirectUri) .Build();
2. 确认Dynamics CRM API的环境兼容性
注意:Dynamics CRM(即Dataverse)商业版环境默认仅支持工作/学校账户访问。如果要使用个人账户,需确保目标环境是Power Apps个人环境,同时权限配置需对应个人环境的API权限。
3. 验证权限范围正确性
确认resource变量指向正确的Dataverse环境URL(例如https://yourorg.crm.dynamics.com),/.default范围表示调用应用已配置的所有静态权限,该配置是正确的。
4. 清理缓存后重新测试
清除本地令牌缓存(可通过删除应用缓存文件,或调用authBuilder.RemoveAsync(account)移除已缓存账户),避免旧配置或错误令牌干扰认证流程。
内容的提问来源于stack exchange,提问作者drdarkfrancis
相关产品推荐
相关产品推荐

