Azure.Identity v1.11.0及以上版本导致SqlClient与Dynamics 365报错
解决Azure.Identity 1.11.0升级后连接Dynamics 365的AADSTS900023错误
问题场景
- 通过Microsoft Entra服务主体身份验证连接Dynamics 365,SQL Server Management Studio 20.0.70.0连接完全正常
- 基于C#、Dapper+SqlClient的应用程序,升级
Azure.Identity包至1.11.0版本后触发身份验证错误,降级回1.10.4版本则恢复正常
报错信息(翻译后)
ClientSecretCredential身份验证失败: AADSTS900023: 指定的租户标识符'authorize'既不是有效的DNS名称,也不是有效的外部域。跟踪ID: 52222220-3332-3331-3033-222225335233 关联ID: fddd3533-aaaa-4fab-8b49-22ea71b32723 时间戳: 2024-04-14 20:20:52Z
原因分析
Azure.Identity 1.11.0版本的内部参数解析逻辑存在bug,导致在配合SqlClient进行身份验证时,租户ID被错误解析为字符串authorize,而非实际配置的租户ID值,进而触发AAD的租户验证错误。
解决方案
临时回退版本
继续使用Azure.Identity1.10.4版本,保证业务正常运行,等待官方修复补丁发布。显式指定租户ID
构建ClientSecretCredential实例时,手动传入租户ID参数,避免依赖库的自动解析逻辑。示例代码:var tenantId = "你的租户ID"; var clientId = "你的应用客户端ID"; var clientSecret = "你的应用客户端密钥"; var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);校验SqlClient连接字符串
确认连接字符串中的认证参数格式正确,无语法错误。示例连接字符串:Server=tcp:<Dynamics服务器名称>.database.windows.net,1433;Initial Catalog=<数据库名称>;Authentication=ActiveDirectoryServicePrincipal;User ID=<客户端ID>;Password=<客户端密钥>;关注官方修复更新
留意Azure.IdentityNuGet包的后续版本发布说明,待包含该问题修复的版本推出后,再尝试升级。
内容的提问来源于stack exchange,提问作者bunjeeb
相关产品推荐
相关产品推荐

