使用 OAuth 和跨源资源共享将单页应用程序连接到 Microsoft Dynamics 365

 

发布日期: 2017年1月

适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online

通过 带 面向 Internet 的部署 (IFD) 的 Microsoft Dynamics CRM Online 2016 更新 和 Microsoft Dynamics 365 本地部署,可以创建使用 JavaScript 处理 Microsoft Dynamics 365 数据的单页应用 (SPA)。 为此启用了跨源共享 (CORS),以便您的 SPA 绕过通常会阻止跨越域边界的请求的浏览器限制。

备注

仅在使用 Web API 时才提供 CORS 支持。 不能使用阻止服务或废弃的组织数据服务。

本主题内容

SPA 和同源策略

CORS 与 Microsoft Dynamics 365 (online) 配合使用

adal.js 的工作原理

准备将 ADAL.js 与 SPA 配合使用

SPA 和同源策略

SPA 依赖大量使用客户端 JavaScript 创建单个不需要加载新页的动态页。 相反,它们使用 XMLHTTPRequest 从服务器检索数据和其他资源。 数据和资源与应用程序在同一个域中时,SPA 效果很好。 但是为了保护对其他域中的数据和资源的访问,所有现代浏览器都实施同源策略,以阻止站点使用来自其他域中的站点的数据和资源。 CORS 提供了获取其他域中的资源的访问权限的方法。 不能创建不经 CORS 访问 Microsoft Dynamics 365 数据的 SPA。

CORS 与 Microsoft Dynamics 365 (online) 配合使用

跨源资源共享规范提供了有关如何实施和使用 CORS 的详细说明。 它介绍了有关需要应用才能让 CORS 工作的各种头和准备请求的所有信息。 好消息是,您不需要成为 CORS 专家就可以将其与 Microsoft Dynamics 365 配合使用。 已经为您完成了服务器端这部分的工作,所以您只需要了解如何使用。 您不需要了解 CORS 的所有内部工作,即可将其与 Microsoft Dynamics 365 配合工作。 相反,您可以使用适用于 JavaScript 的 Azure Active Directory 身份验证库 (adal.js),该身份验证库将为您处理 CORS 的大部分复杂工作。 由于使用 Azure Active Directory 对 Dynamics 365(在线) 和 面向 Internet 的部署 (IFD) 用户执行身份验证,所以支持 ADAL.js 对 SPA 用户执行身份验证。

adal.js 的工作原理

核心库是 adal.js。 可以在 https://secure.aadcdn.microsoftonline-p.com/lib/1.0.0/js/adal.min.js 中访问此库的最小化版本。 Github 项目和文档位于 https://github.com/AzureAD/azure-activedirectory-library-for-js

adal.js 库中包含使用 OAuth2 执行身份验证的低级别功能。 Adal.js 设计为可以与其他框架配合使用,例如,有一个 adal-angular.js 库设计为可以与 Angular 框架配合使用。处理该库的方法是设置特定配置属性,然后将等到发生触发交互流的事件。 这可能只是调用 login 函数,或者如果您的应用程序有路由行为,则可以通过该路由的控制器的配置方式来启动身份验证。

如果需要执行身份验证,将把用户带到登录页面,他们可以在这里输入凭据。 成功通过身份验证之后,将使用充当 URL 附加部分(使用 #)的标记信息把他们再次定向回调用页面。 这样 SPA 就可以获取该令牌,并将其缓存到浏览器的本地或会话存储中。 这意味着身份验证后重新加载整页,但是这次提供有关已授权用户的信息,而应用程序则可以继续调用 Dynamics 365 Web API 或其他资源。

调用 Dynamics 365 Web API 时,必须使用 XMLHTPPRequest 将标记值添加到 Authorization 头中。 但是,因为标记会到期,所以您需要确保用户使用您的 SPA 时,标记不过期。 请注意,若要输入新骗局,需要将您的 SPA 页的所有内容传输到登录页。 如果在用户正在执行操作时执行此操作,会导致非常糟糕的用户体验。 为了确保不出现这种情况,请将您的 Web API 调用包装到 acquireToken 函数中,这样必要时不将用户定向到登录页,即可检查和刷新标记的有效性。

准备将 ADAL.js 与 SPA 配合使用

若要将 SPA 配置为与 adal.js 配合使用,您需要:

  1. 在 Azure Active Directory 租户中注册您的应用程序

  2. 导出您注册的应用程序清单并编辑,以便允许 OAuth2隐式流,然后将 JSON 文件导入回您的应用程序注册。

  3. 使用来自该注册的信息设置 SPA 中的配置变量。

    您将需要加入以下内容:

    • 您的 Microsoft Dynamics 365 组织的 URL

    • 您的组织用于执行身份验证的 Active Directory 租户的名称

    • 您在注册应用程序时获取的客户端 ID

    • 开发期间部署或调试 SPA 的位置的 URL

所需步骤集合在 演练:使用 adal.js 注册和配置 SimpleSPA 应用程序 中进行了介绍。

另请参阅

在 Microsoft Dynamics 365 中对用户进行身份验证
使用 OAuth 连接到 Microsoft Dynamics 365 Web 服务
活动目录和基于声明的身份验证

Microsoft Dynamics 365

© 2017 Microsoft。 保留所有权利。 版权