使用accessToken获取Dynamics Organization Uri

时间:2016-11-30 22:42:48

标签: node.js azure oauth dynamics-crm

我有一个nodejs项目,它使用adal-node(https://www.npmjs.com/package/adal-node)通过OAuth2向Dynamics CRM进行身份验证。我已成功获得authorizationUrl,然后发布代码以获取accessToken。但是,最后一个响应不会返回instanceUrl。因此,我一直在线搜索MSDN页面,以获取有关如何使用accessToken获取正确的组织实例Uri的文档。我已经尝试了这个(https://msdn.microsoft.com/en-us/library/mt607485.aspx)并且只获得了401“授权已被拒绝此请求”响应。也许我不正确地格式化这个请求?有人可以指导我一些文档,了解如何使用我获得的有效accessToken来检索该用户的组织实例Uri吗?感谢。

2 个答案:

答案 0 :(得分:1)

最近我自己经历了这个问题,我认为您可能遇到的问题是当您请求身份验证令牌不正确时请求访问的资源。虽然您认为它是https://globaldisco.crm.dynamics.com/,但我实际上已成功使用https://disco.crm.dynamics.com/(确保包含试验性斜杠)作为资源。

如果您的令牌被拒绝,请查看响应标头中的WWW-Authenticate属性,它将指示您应该请求的资源。与此类似:

Bearer authorization_uri=https://login.windows.net/common/oauth2/authorize, resource_id=https://disco.crm3.dynamics.com/

在获得正确的资源后,我能够毫无问题地查询全球迪斯科服务,即使给予NA disco资源从各个地区返回实例。这适用于在北美和英国开始的Azure AD租户。

我在这里写了一个完整的示例 - http://colinvermander.com/2017/01/19/calling-the-dynamics-global-discovery-service/

答案 1 :(得分:0)

根据https://msdn.microsoft.com/en-us/library/mt607485.aspx的说明,要求https://globaldisco.crm.dynamics.com/api/discovery/v1.0/Instances(UniqueName='myorg'),您需要将myorg替换为您自己的unique name动态crm服务器。

您可以参考https://www.dynamics-pros.com/support/kb/kb102033了解如何获取唯一名称。