Dynamics crm 在为Dynamics 365创建IServiceManagement时,为什么身份验证端点会使用HTML登录页面进行响应?
我有一些集成代码,打算通过CRM SDK使用Organization服务 在一个环境中,创建一个Dynamics crm 在为Dynamics 365创建IServiceManagement时,为什么身份验证端点会使用HTML登录页面进行响应?,dynamics-crm,microsoft-dynamics,Dynamics Crm,Microsoft Dynamics,我有一些集成代码,打算通过CRM SDK使用Organization服务 在一个环境中,创建一个IServiceManagement: IServiceManagement orgServiceManagement=ServiceConfigurationFactory.CreateManagement(新Uri(“动态Uri”)); 然后使用服务帐户凭据进行身份验证: AuthenticationCredentials authCredentials = new Authentication
IServiceManagement
:
IServiceManagement orgServiceManagement=ServiceConfigurationFactory.CreateManagement(新Uri(“动态Uri”));
然后使用服务帐户凭据进行身份验证:
AuthenticationCredentials authCredentials = new AuthenticationCredentials();
authCredentials.ClientCredentials.UserName.UserName = _config.GetValue<string>("Dynamics:Username");
authCredentials.ClientCredentials.UserName.Password = _config.GetValue<string>("Dynamics:Password");
AuthenticationCredentials tokenCredentials = orgServiceManagement.Authenticate(authCredentials);
AuthenticationCredentials authCredentials=新的AuthenticationCredentials();
authCredentials.ClientCredentials.UserName.UserName=_config.GetValue(“动态:用户名”);
authCredentials.ClientCredentials.UserName.Password=_config.GetValue(“动态:密码”);
AuthenticationCredentials tokenCredentials=orgServiceManagement.Authentication(authCredentials);
很好
在另一个Dynamics环境中,调用GetServiceManagement失败,并显示以下错误消息:
System.InvalidOperationException异常
HResult=0x80131509
Message=元数据包含无法解析的引用:“客户端id]&响应\模式=表单\发布与响应\类型=代码+id \令牌和范围=openid+配置文件和状态=OpenIdConnect.AuthenticationProperties%[some base-64]重定向到%3dhttps%253a%252f%252ftst success.crm4.dynamics.com%252f&nonce=[some nonce]&重定向uri=https:%2f%2fcloudredirector.crm4.dynamics.com%2fG%2fautRedirect%2finder.aspx&max\u age=86400'。
Source=System.ServiceModel
堆栈跟踪:
位于System.ServiceModel.Description.MetadataExchangeClient.MetadataRetriever.Retrieve(TimeoutHelper TimeoutHelper)
位于System.ServiceModel.Description.MetadataExchangeClient.ResolveNext(ResolveCallState ResolveCallState)
位于System.ServiceModel.Description.MetadataExchangeClient.GetMetadata(MetadataRetriever retriever)
位于System.ServiceModel.Description.MetadataExchangeClient.GetMetadata(Uri地址,MetadataExchangeClientMode)
位于Microsoft.Xrm.Sdk.Client.ServiceMetadataUtility.RetrieveServiceEndpointMetadata(类型contractType、Uri serviceUri、布尔checkForSecondary)
位于Microsoft.Xrm.Sdk.Client.ServiceConfiguration`1..ctor(Uri serviceUri,布尔值checkForSecondary)
在Microsoft.Xrm.Sdk.Client.ServiceConfigurationFactory.CreateConfiguration[TService](Uri serviceUri,布尔启用ProxyTypes,程序集)
位于Microsoft.Xrm.Sdk.Client.ServiceConfigurationFactory.CreateConfiguration[TService](Uri serviceUri)
在c:\users\t.wolverson\Source\Repos\crmauththest\crmauthest\Program.cs中的crmauthest.Program.Main(字符串[]args)处:第18行
内部异常1:
XmlException:CData元素在XML文档的顶层无效。第1行,位置3
(我屏蔽了看起来是识别或加密的位)
在PostMan中发布到该URL会生成浏览器登录页面的HTML,这解释了失败的原因;这不是ServiceConfigurationFactory所期望的。该场景不是用户交互的,因此这是没有意义的,因为没有浏览器,也没有用户能够与之交互
我必须在Dynamics CRM Online中更改什么才能阻止它这样做,并使其正常工作?您是否在发布代码行后立即根据AuthenticationProviderType实例化OrganizationServiceProxy?像这样
var orgServiceManagement = ServiceConfigurationFactory.CreateManagement<IOrganizationService>(new Uri(ConfigurationManager.AppSettings["CrmUrlService"]));
var authCredentials = new AuthenticationCredentials();
authCredentials.ClientCredentials.UserName.UserName = ConfigurationManager.AppSettings["CrmUserName"];
authCredentials.ClientCredentials.UserName.Password = ConfigurationManager.AppSettings["CrmPassword"];
var tokenCredentials = orgServiceManagement.Authenticate(authCredentials);
IOrganizationService _service;
switch (orgServiceManagement.AuthenticationType)
{
case AuthenticationProviderType.ActiveDirectory:
_service = new OrganizationServiceProxy(orgServiceManagement, tokenCredentials.ClientCredentials);
break;
default:
_service = new OrganizationServiceProxy(orgServiceManagement, tokenCredentials.SecurityTokenResponse);
break;
}
如果您需要Dynamics Online中的其他身份验证方法,请检查如何构建连接字符串
有关内部部署,请检查如何构建连接字符串。请告诉我我的答案是否有用,或者我是否可以进一步帮助您。
var orgServiceManagement = ServiceConfigurationFactory.CreateManagement<IOrganizationService>(new Uri(ConfigurationManager.AppSettings["CrmUrlService"]));
var authCredentials = new AuthenticationCredentials();
authCredentials.ClientCredentials.UserName.UserName = ConfigurationManager.AppSettings["CrmUserName"];
authCredentials.ClientCredentials.UserName.Password = ConfigurationManager.AppSettings["CrmPassword"];
var tokenCredentials = orgServiceManagement.Authenticate(authCredentials);
IOrganizationService _service;
switch (orgServiceManagement.AuthenticationType)
{
case AuthenticationProviderType.ActiveDirectory:
_service = new OrganizationServiceProxy(orgServiceManagement, tokenCredentials.ClientCredentials);
break;
default:
_service = new OrganizationServiceProxy(orgServiceManagement, tokenCredentials.SecurityTokenResponse);
break;
}
var myConnectionString = "Url=https://[YourOrganization].crm4.dynamics.com;Username=[YourUser];Password=[YourPassword];AuthType=Office365;";
var crmClient = new CrmServiceClient(myConnectionString);
//Do your stuff
var response = crmClient.Execute(new WhoAmIRequest());