在Dynamics 365内部进行身份验证

时间:2017-05-29 14:23:27

标签: odata dynamics-crm dynamics-365 microsoft-dynamics-webapi

我正在尝试使用.net

的OData客户端连接到Dynamics 365内部部署

我尝试通过基本身份验证进行身份验证,但这不起作用。

var c = new Microsoft.Dynamics.CRM.System(new Uri("https://mycrm01/crm/api/data/v8.2/"));

c.SendingRequest2 += (o, requestEventArgs) => {
     var creds = username + ":" + password;
     var encodedCreds = Convert.ToBase64String(Encoding.ASCII.GetBytes(creds));
     requestEventArgs.RequestMessage.SetHeader("Authentication", "Basic" + encodedCreds);
};

var contacts = c.Contacts.Where(x => x.Firstname=="testuser");
foreach (var contact in contacts)
{

}

我收到的错误是:HTTP错误401 - 未经授权:访问被拒绝

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

一般情况下,我只使用JavaScript中的OData客户端。使用.NET时,我使用SDK库,通过CrmServiceClient类提供身份验证和访问。

要使用C#中的OData客户端,本文概述了各种身份验证方法:https://msdn.microsoft.com/en-us/library/mt595798.aspx

  

Web API身份验证模式

     

使用时有三种不同的方法来管理身份验证   Web API。使用Web资源中的JavaScript

     

在HTML Web资源中使用带有JavaScript的Web API时,   表单脚本或功能区命令,您不需要包含任何代码   用于身份验证在每种情况下,用户已经是   由应用程序验证和身份验证由   应用。使用内部部署

     

当您使用Web API进行内部部署时,必须包括   用户的网络凭据。以下示例是C#函数   这将返回为给定用户的网络配置的HttpClient   凭证:C#

private HttpClient getNewHttpClient(string userName,string
password,string domainName, string webAPIBaseAddress) {
HttpClient client = new HttpClient(new HttpClientHandler() { Credentials = new NetworkCredential(userName, password, domainName)
 });
 client.BaseAddress = new Uri(webAPIBaseAddress);
 client.Timeout = new TimeSpan(0, 2, 0);
return client; 
}   
  

使用Microsoft Dynamics 365(在线)或面向Internet的部署

     

使用适用于Dynamics 365的Web API(在线)或内部部署时   面向Internet的部署(IFD)您必须使用OAuth,如中所述   使用OAuth连接到Microsoft Dynamics 365 Web服务。

     

如果您正在使用JavaScript创建单页面应用程序(SPA)   您可以使用adal.js库,如使用OAuth中所述   用于将单页应用程序连接到的跨源资源共享   Microsoft Dynamics 365。