无法使用IFD身份验证连接到Dynamics 365(内部部署)

时间:2017-09-29 13:29:02

标签: connection authorization dynamics-crm crm on-prem

我有一个带有IFD身份验证的Dynamics CRM 365(内部部署)环境。我正在尝试使用sdk对CRM进行操作。我首先进行测试连接,并将该测试连接存储在缓存对象中。此缓存对象的类型为IDictionary。我正在努力解决一个奇怪的问题。对于不同的实例,它将创建不同的代理并缓存它们。

方案:
1)Auth类型是联合 - 它将使用此实时ID和发现URL并使用MD5算法在Key上创建并存储在IDictionary中,因此下次当我执行任何操作时,它将检查缓存中的代理。如果缓存为真,它将从缓存中获取代理并继续。

这在开发中的预期效果,但在生产中我有一个奇怪的问题。 假设第1天它在auth类型为AD时建立连接,即使我为联邦提供发现URL,它也只使用该类型的连接一整天。

下次当我在第2天尝试假设或者我关闭应用并再次打开时,这次它不能用于相同的配置。

我对确切发生的事情感到困惑。

连接代码:

private CrmServiceClient CreateServiceClient(AuthenticationProviderType _endpointType, IServiceManagement<IOrganizationService> organizationServiceManagement)
        {
            AuthCredentials = GetCredentials(_endpointType);
            string connectionString = string.Empty;
            string organizationUri = OrganizationServiceManagement.CurrentServiceEndpoint.Address.Uri.AbsoluteUri
                .Replace(OrganizationServiceManagement.CurrentServiceEndpoint.Address.Uri.AbsolutePath, string.Empty);
            switch (_endpointType)
            {
                case AuthenticationProviderType.None:
                    break;
                case AuthenticationProviderType.ActiveDirectory:
                    connectionString = $"AuthType=AD;Url={ organizationUri }/{ AuthInfo.OrganizationUniqueName} ; Domain={ AuthInfo.Domain } ; Username={ AuthInfo.UserName }; Password ={ AuthInfo.Password }";
                    break;
                case AuthenticationProviderType.Federation:
                    connectionString = $"AuthType=IFD;ServiceUri={ organizationUri }/{ AuthInfo.OrganizationUniqueName };Domain={ AuthInfo.Domain };Username={ AuthInfo.Domain }\\{ AuthInfo.UserName };Password={ AuthInfo.Password };";
                    break;
                case AuthenticationProviderType.LiveId:
                    break;
                case AuthenticationProviderType.OnlineFederation:
                    connectionString = $"AuthType=Office365;Username={AuthInfo.UserName}; Password={AuthInfo.Password}; Url={organizationUri}";
                    break;
                default:
                    break;
            }
            var serviceClient = new CrmServiceClient(connectionString);
            return serviceClient;
        }

0 个答案:

没有答案