使用OAuth连接Dynamics CRM遇授权错误,疑与TLS版本相关
问题关联确认
这个错误确实和TLS版本直接相关。
原因很明确:Dataverse(原Dynamics CRM)早已停止支持TLS 1.0/1.1,仅接受TLS 1.2及以上版本的连接。当故障服务器用TLS 1.0发起请求时,Azure AD身份验证服务器会直接拒绝连接,导致OAuth流程无法获取必要的authority参数,最终抛出"Need a non-empty authority"异常。
具体解决步骤
1. 强制应用使用TLS 1.2
在初始化ServiceClient之前,在代码中添加以下配置,强制指定TLS版本:
// 放在ServiceClient初始化代码之前执行 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
如果是.NET Framework 4.6及以上版本的项目,也可以通过配置文件(app.config/web.config)全局设置,无需修改代码:
<configuration> <system.net> <settings> <servicePointManager securityProtocol="Tls12" /> </settings> </system.net> </configuration>
2. 配置服务器系统级TLS设置(推荐)
仅修改应用配置不够,建议直接在服务器层面启用TLS 1.2并禁用旧版本:
- 打开Windows注册表编辑器(
regedit),定位到路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols - 分别创建
TLS 1.0\Client和TLS 1.1\Client项,在每个项下添加两个DWORD值:DisabledByDefault:设为1Enabled:设为0
- 创建
TLS 1.2\Client项,添加两个DWORD值:DisabledByDefault:设为0Enabled:设为1
- 重启服务器使配置生效
3. 检查连接字符串格式
确认连接字符串中的Url是完整的HTTPS地址,正确格式应为https://my-app.crm.dynamics.com,缺失https://可能引发额外连接问题。
额外排查点
如果按上述步骤操作后仍有问题,检查服务器上的.NET Framework版本,建议升级到4.7.2及以上——新版本对TLS 1.2的支持更完善,能避免不少兼容性问题。
内容的提问来源于stack exchange,提问作者Tawab Wakil
相关产品推荐
相关产品推荐

