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

标签 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 存储库,例如 this one ,并编辑其配置文件以指向我的 Azure 应用程序。这些尝试都导致了 401(未经授权)跨域 错误,详细信息请参阅我的 separate question

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

最佳答案

这个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 作为解决方法的代理。

关于angular - 使用 Angular 2 (TypeScript) 验证和查询 Dynamics CRM Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43497738/

相关文章:

Angular CLI 停止在浏览器控制台中给我合理的行(没有源映射),但终端显示正确的源

javascript - Angular 应用程序中的 Bootstrap 5

typescript - 如何在 Typescript 中的两个不同文件中正确导入相同的命名空间

typescript 选择字符串属性

typescript - 从 typescript 模块导出所有类型(并且只是类型)

Angular 生产构建无法加载 - 由于不允许的 MIME 类型 (“text/html”,加载模块被阻止)

javascript - 为什么要切片不纯的管道?

azure - 使用 Azure PowerShell 备份 Azure WebApp

sql-server - 逻辑应用执行 SQL TO JSON 自动对输出进行分块

javascript - 没有 'Access-Control-Allow-Origin' header