【问题标题】:CRM OrganizationServiceProxy authentication issueCRM OrganizationServiceProxy 身份验证问题
【发布时间】:2015-03-04 06:43:13
【问题描述】:

我们的 Web 应用程序通过 Microsoft.Xrm.Sdk OriganizationServiceProxy 调用 CRM 时出现身份验证失败的问题。该问题似乎是特定于环境的,即调用在我们的 DEV Web 服务器上工作,但当应用程序升级到我们的系统测试环境时失败。失败的代码如下:

using (var serviceProxy = this.serviceFactory.Impersonate(userProvider.PrincipalUserName).ServiceProxy)
                {
                    var countResult = serviceProxy.RetrieveMultiple(new FetchExpression(query));
                    int? count = 0;

                    var entity = countResult.Entities.FirstOrDefault();
                    if (entity != null)
                    {
                        count = (int?)((AliasedValue)entity["activity_count"]).Value;
                    }

                    return count.Value;
                }

我们的日志中出现的错误是:

System.ServiceModel.Security.SecurityNegotiationException:调用者未经服务验证。 ---> System.ServiceModel.FaultException:由于身份验证失败,无法满足对安全令牌的请求。 在 System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault(消息消息,端点地址目标) 在 System.ServiceModel.Security.SspiNegotiationTokenProvider.GetNextOutgoingMessageBody(消息incomingMessage,SspiNegotiationTokenProviderState sspiState) --- 内部异常堆栈跟踪结束 ---

我已经仔细检查了 IIS 站点的 apppool 标识和 CRM 设置。这里有什么我们可能遗漏的明显内容吗?

【问题讨论】:

  • 通过仔细检查 IIS 和 CRM 设置的 appPool 身份来定义您的意思。
  • 检查用于 Web 服务器上的应用程序池身份的服务帐户是否可以与 CRM 服务器通信(服务帐户在 CRM 服务器上具有系统管理员角色)。我们的 Web 应用程序进行了其他基于 CRM LINQ 的调用(使用 ServiceContext),这些调用没有问题。我们遇到的唯一身份验证问题是 Web 应用程序通过 OrganizationServiceProxy 和 RetrieveMultiple 方法查询 CRM 的某些调用。
  • 您的系统测试环境是 IFD 吗?

标签: authentication dynamics-crm-2011


【解决方案1】:

我发现与 CRM Online 的连接花费的时间最长,因此我创建了一个实例来通过具有显式凭据的 OrganizationServiceProxy 循环,我可以轻松地在环境之间切换。

    IServiceManagement<IOrganizationService> management = ServiceConfigurationFactory.CreateManagement<IOrganizationService>(new Uri(CrmUrl));

    ClientCredentials credentials = new ClientCredentials();
    credentials.UserName.UserName = CrmUserName;
    credentials.UserName.Password = CrmPassword;

    AuthenticationCredentials authCredentials = management.Authenticate(new AuthenticationCredentials { ClientCredentials = credentials });
    SecurityTokenResponse securityTokenResponse = authCredentials.SecurityTokenResponse;

    OrganizationServiceProxy orgProxy = new OrganizationServiceProxy(management, securityTokenResponse);
    orgProxy.EnableProxyTypes();
    _xrmService = new XrmServiceContext(orgProxy)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2015-08-25
    • 2010-11-17
    • 2019-06-19
    相关资源
    最近更新 更多