升级Xcode 13.3+推送TFS Git代码报NTLM认证不支持如何解决?
Xcode 13.3 及以上版本内置的libgit2依赖升级后,默认关闭了NTLM认证协议支持。旧版本TFS(Azure DevOps Server)的Windows身份验证默认优先返回NTLM认证挑战,因此触发报错:
'NTLM' authentication is not supported (-1) Xcode
直接在TFS服务端全局禁用NTLM的方案会导致使用Visual Studio、浏览器访问的其他团队成员无法正常登录,影响范围过大,不具备生产环境可操作性。该问题属于Xcode侧依赖升级带来的兼容性变更,未在公开发行说明中明确标注。
按优先级从高到低排序:
优先方案:配置Git认证优先级,强制优先使用Negotiate(Kerberos)认证
打开终端执行全局Git配置命令,调整HTTP认证模式的优先级,让客户端优先尝试Kerberos协商认证,跳过NTLM检测逻辑:git config --global http.gitAuthModes "negotiate,ntlm"执行完成后完全退出Xcode重新打开,再执行推送、拉取操作即可。该配置仅修改本机Git行为,对服务端和其他团队成员无任何影响。
如果所在TFS环境未配置Kerberos支持,该方案无法生效,请使用下一个方案。兼容方案:使用个人访问令牌(PAT)做HTTPS认证
- 登录TFS网页端,进入个人安全设置页面,生成具备代码仓库读写权限的个人访问令牌
- 打开Xcode设置-账户页,删除本地保存的对应TFS仓库的旧凭据
- 再次触发代码拉取/推送操作时,用户名填写TFS登录账号,密码栏填入刚生成的个人访问令牌即可完成认证。
PAT认证不走NTLM协议流程,完全不受本次Xcode认证逻辑变更影响,是跨版本兼容性最高的方案。
备选方案:替换Xcode内置Git为旧版本
若前两种方案均无法适配环境,可以通过Homebrew安装Git 2.32及更早版本(对应Xcode 13.2.1及之前的内置Git版本),之后在Xcode设置-位置-命令行工具项中,选择自行安装的旧版Git路径,重启Xcode即可恢复旧版的NTLM认证支持。
注意:替换Xcode内置依赖可能触发部分Git相关功能的兼容性问题,非必要不选择该方案。
禁止在TFS服务端全局禁用NTLM认证:多数域环境下部署的TFS,Visual Studio客户端、部分旧版本浏览器会将NTLM作为兜底认证方式,全局关闭会导致大面积用户登录失败。
内容的提问来源于stack exchange,提问作者AaoIi

