使用Angular 2(TypeScript)对Dynamics CRM Web API进行身份验证和查询

时间:2017-04-19 13:51:57

标签: angular azure typescript dynamics-crm adal

如何在使用Angular 2(TypeScript)构建的SPA中对Dynamics CRM Web API进行身份验证和查询?

到目前为止的研究表明:

  • 必须将Dynamics CRM(版本2016或365)实例注册为Azure中的应用程序。
  • 用户可以通过Azure AD对Azure注册的应用程序进行身份验证。 Azure有一个名为ADAL的客户端身份验证库,用JavaScript编写。

到目前为止,我的尝试涉及克隆使用ADAL构建的各种Angular 2 repos,例如this one,并编辑其配置文件以指向我的Azure应用程序。这些尝试都导致401 (Unauthorized) cross-domain错误,我的separate question详细说明了这些错误。

this中使用相同的配置(例如cliendId)来自Microsoft的JavaScript演练成功。

2 个答案:

答案 0 :(得分:1)

Access-Control-Allow-Origin 问题更多地与服务器端相关。你使用Angular 1或Angular 2开发并不重要。

您可以确认此问题手动发送选项请求以验证您的域是否被允许请求。例如,我们可以使用以下请求检查是否允许来自http://localhost:3000的AJAX请求:

OPTIONS: https://xxxx.crm.dynamics.com/api/data/v8.0/accounts
Authorization: Bearer {accessToken}
Origin: http://localhost:3000
Host: xxxx.crm.dynamics.com
Access-Control-Request-Headers: authorization
Access-Control-Request-Method: GET

如果允许域名,则返回如下所示的响应(请参阅Access-Control-Allow-Origin): enter image description here

要解决此问题,您需要检查服务器是否支持CORS。如果不允许,您可以创建Web API作为解决方法的代理。

答案 1 :(得分:1)

Fei Xue发布的代码示例here on GitHub已证明在使用Azure托管的Dynamics CRM应用程序进行身份验证并查询Web API方面取得了成功。

我使用的类似代码示例导致SELECT YEAR( ordered_date + interval 3 month) AS Jahr, SUM( preis ) AS Preis, count(*) as Anzahl FROM wccrm_orders WHERE typ = 'Brautkleid' GROUP BY Jahr ORDER BY Jahr ASC; HTTP错误。为什么这个样本有效,而其他人暂时没有答案。