You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XrmToolkit连接Dynamics 365遇匿名认证403禁止错误求助

问题场景

使用XrmToolkit的CrmServiceClient连接Dynamics 365,调用代码如下:

var crmServiceClient = new CrmServiceClient(connectionString);

相同代码和连接字符串(包含相同凭据、服务器地址、AppId等信息)在部分机器可正常运行,但在其他机器上连接失败,报错:

The HTTP request was forbidden with client authentication scheme 'Anonymous'.

连接失败的详细追踪日志如下:

Microsoft.Xrm.Tooling.Connector.CrmServiceClient Verbose: 16 : Initialize CRM connection Started - AuthType: OAuth
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Verbose: 16 : Direct Login Process Started
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Information: 8 : Attempting to Connect to Uri https://**********.crm.dynamics.com/XRMServices/2011/Organization.svc
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Start: 256 : BuildOrgConnectUri CoreClass ()
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Verbose: 16 : DiscoveryServer indicated organization service location = https://********.crm.dynamics.com/XRMServices/2011/Organization.svc
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Stop: 512 : BuildOrgConnectUri CoreClass ()
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Information: 8 : Organization Service URI is = https://**********.crm.dynamics.com/XRMServices/2011/Organization.svc
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Verbose: 16 : ConnectAndInitCrmOrgService - Initializing Organization Service Object
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Information: 8 : ConnectAndInitCrmOrgService - Requesting connection to Organization with CRM Version: No organization data available
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Information: 8 : AuthenticateService - found authority with name https://login.microsoftonline.com/********-****-****-****-************/oauth2/authorize
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Information: 8 : AuthenticateService - found resource with name https://********.crm.dynamics.com/
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Verbose: 16 : ObtainAccessToken - CRED
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Verbose: 16 : Added WebClient Header Hooks to the Request object.
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Information: 8 : ConnectAndInitCrmOrgService - Proxy created, total elapsed time: 00:00:02.5677367
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Information: 8 : Querying Organization Instance Details. Request ID: ********-****-****-****-************
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Error: 2 : Invalid Login Information : The HTTP request was forbidden with client authentication scheme 'Anonymous'.
Source  : mscorlib
Method  : HandleReturnMessage
Date    : 3/12/2025
Time    : 9:29:29 AM
Error   : The HTTP request was forbidden with client authentication scheme 'Anonymous'.
Stack Trace     : Server stack trace:
   at System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication(HttpWebRequest request, HttpWebResponse response, WebException responseException, HttpChannelFactory`1 factory)
   at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory`1 factory, WebException responseException, ChannelBinding channelBinding)
   at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Microsoft.Xrm.Sdk.IOrganizationService.Execute(OrganizationRequest request)
   at Microsoft.Xrm.Sdk.WebServiceClient.OrganizationWebProxyClient.<>c__DisplayClass40_0.<ExecuteCore>b__0()
   at Microsoft.Xrm.Sdk.WebServiceClient.WebProxyClient`1.ExecuteAction[TResult](Func`1 action)
   at Microsoft.Xrm.Sdk.WebServiceClient.OrganizationWebProxyClient.ExecuteCore(OrganizationRequest request)
   at Microsoft.Xrm.Sdk.WebServiceClient.OrganizationWebProxyClient.Execute(OrganizationRequest request)
   at Microsoft.Xrm.Tooling.Connector.CrmWebSvc.RefreshInstanceDetails(IOrganizationService crmService, Uri uriOfInstance)
   at Microsoft.Xrm.Tooling.Connector.CrmWebSvc.DoDirectLogin(Boolean IsOnPrem)
   at Microsoft.Xrm.Tooling.Connector.CrmWebSvc.InitCRM2011Service()
======================================================================================================================
Inner Exception Level 1 :
Source  : System
Method  : GetResponse
Date    : 3/12/2025
Time    : 9:29:29 AM
Error   : The remote server returned an error: (403) Forbidden.
Stack Trace     : at System.Net.HttpWebRequest.GetResponse()
   at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
======================================================================================================================

Microsoft.Xrm.Tooling.Connector.CrmServiceClient Error: 2 : Unable to Login to Dynamics CRM
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Error: 2 : Unable to Login to Dynamics CRM
Source  : Not Provided
Method  : Not Provided
Date    : 3/12/2025
Time    : 9:29:29 AM
Error   : Unable to Login to Dynamics CRM
Stack Trace     : Not Provided
======================================================================================================================
原因分析

从日志可看出,连接流程已进入OAuth认证环节,获取令牌的步骤也已触发,但最终发送到Dynamics 365的请求未携带有效认证信息,被识别为匿名请求,导致403禁止错误。核心原因包括:

  • 代理配置异常:失败机器的代理服务器剥离了请求的认证头,或XrmToolkit未正确适配代理设置,导致认证信息丢失。
  • 安全软件拦截:机器上的防火墙、杀毒软件或企业安全工具拦截了OAuth认证请求的头部信息,使得请求变为匿名状态。
  • 组件版本不一致:失败机器上的XrmToolkit(Microsoft.Xrm.Tooling.Connector)或.NET Framework版本与正常机器存在差异,旧版本可能存在OAuth认证的兼容性问题。
  • 系统权限或配置问题:运行程序的用户权限不足,无法读取OAuth认证所需的系统资源;或系统环境变量(如代理相关变量)配置错误,干扰了认证流程。
解决办法

针对上述原因,可按以下步骤排查修复:

  • 调整代理配置
    • 在连接字符串中明确指定代理设置,例如自动检测代理:ProxyType=Auto;,或手动指定代理地址:ProxyAddress=http://proxyserver:port;ProxyUserName=username;ProxyPassword=password;
    • 若允许,临时关闭机器的代理设置,测试连接是否恢复正常。
  • 排查安全软件影响
    • 临时禁用机器上的防火墙、杀毒软件或企业安全工具,验证连接是否正常。
    • 若恢复正常,将Dynamics 365域名(*.crm.dynamics.com)和微软登录域名(login.microsoftonline.com)加入安全软件的白名单。
  • 统一组件版本
    • 对比正常机器与失败机器的Microsoft.Xrm.Tooling.Connector NuGet包版本,将失败机器的版本升级至与正常机器一致的最新稳定版。
    • 确保失败机器安装的.NET Framework版本与正常机器相同(推荐4.7.2及以上版本,对OAuth认证支持更完善),版本过低则进行升级。
  • 验证系统权限与配置
    • 检查失败机器的HTTP_PROXY/HTTPS_PROXY环境变量,若配置异常则调整或移除。
    • 使用管理员权限运行程序,测试是否因权限不足导致认证失败。
  • 明确指定认证类型
    在连接字符串中强制指定OAuth认证类型,避免自动检测出错,示例连接字符串:
    AuthType=OAuth;Username=user@domain.com;Password=yourpassword;Url=https://yourorg.crm.dynamics.com;AppId=00000000-0000-0000-0000-000000000000;RedirectUri=app://58145B91-0C36-4500-8554-080854F2AC97;LoginPrompt=Auto
    

内容的提问来源于stack exchange,提问作者Stephan G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:56:02