使用 Angular 2 (TypeScript) 验证和查询 Dynamics CRM Web API

Authenticate and query the Dynamics CRM Web API using Angular 2 (TypeScript)

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

迄今为止的研究表明:

到目前为止,我的尝试涉及克隆各种 Angular 2 个使用 ADAL 构建的存储库,例如 this one, and editing their configuration files to point towards my Azure application. These attempts have all resulted in 401 (Unauthorized) cross-domain errors which is detailed in my

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

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

如果域被允许,它会 return 如下响应(参考 Access-Control-Allow-Origin):

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

Fei Xue 提供的代码示例发布 here on GitHub 已证明可以成功地使用 Azure 中托管的 Dynamics CRM 应用程序进行身份验证并查询 Web API。

我使用过的类似代码示例导致 401 Unauthorized HTTP 错误。为什么此样本有效而其他样本无效的原因目前仍未得到解答。