【问题标题】:Getting back 401 from Dynamics 365 despite being issued valid token尽管已颁发有效令牌,但仍从 Dynamics 365 取回 401
【发布时间】:2020-05-29 17:27:30
【问题描述】:

我正在尝试重写当前使用 JavaScript 连接到 Dynamics 365 的客户端应用

let URL = "https://<company-name>.operations.dynamics.com/data/FinancialDimensionValues?cross-company=true";
let  body = '';
var headers = {'Content-Type':'application/json'};
let response = ai.https.authorizedRequest(URL, 'GET', body, headers);

目前,此 JavaScript 应用程序可以正常工作并返回 JSON 数据。我正在尝试使用 C# 重写此应用程序。我首先从 Postman 开始,以确保在继续编写 C# 代码之前我已完成所有身份验证步骤。

使用 Postman,我可以使用“客户端凭据”流程成功获取 JWT 令牌,在该流程中,我将客户端 ID 和客户端密码传递给访问令牌请求 URL。但是,当尝试访问 Dynamics 365 中的 API 端点时,即使我正确传递了 JWT 访问令牌,我也会收到 HTTP 401。

这是访问令牌请求 URL:

https://login.microsoftonline.com/722b0db7-9629-4304-92a0-dfb4a1debe62/oauth2/token?resource=https://&lt;company-domain-here&gt;.dynamics.com

我认为我必须正确地进行身份验证,否则我将无法取回有效的访问令牌。此外,由于 JavaScript 应用程序已经到位,因此我假设 Dynamics 365 已正确配置以允许 API 访问。

我想弄清楚我在 Postman 中可能做错了什么导致我收到 401?有效的 JavaScript 请求与我通过 Postman 发送的请求有何不同?

【问题讨论】:

  • 您能否确保将 Bearer 令牌作为请求标头项传递?
  • @ArunVinoth 是的。以 Authorization Bearer &lt;token here&gt; 的形式传入 heder
  • 获取token的时候,Rour资源访问url好像不一样。 https://&lt;company-domain-here&gt;.dynamics.com 与您的请求中的https://&lt;company-name&gt;.operations.dynamics.com/
  • @NickGoloborodko 是的,我明白你在说什么,但这是个问题吗?令牌请求 URL 可以与资源 URL 不同。
  • @webworm URL 包含在令牌中,除非有特定的匹配项,否则我猜它可能会破坏动态中的身份验证机制。只是觉得可能值得一试。

标签: api dynamics-crm postman dynamics-365


【解决方案1】:

问题终于解决了。 如上所述,请遵循documentation

如果遇到 401 错误,这是最后一招。

在postman下Authorization-->Add authorization data to-->选择Request Headers。

现在触发查询,您将获得 200 ok。

Ref帮助我弄清楚的文章。

【讨论】:

  • 优秀的文章感谢您发布链接。我可以确认 Postman 临时标头确实包含不记名令牌,因此这不是问题。我认为上面 cmets 中的@Nick 可能会有所作为。我需要确认用于访问 API 端点的 URL 与 JWT 中编码的 URL 相同。
猜你喜欢
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2018-06-24
  • 1970-01-01
  • 2021-03-11
  • 2019-10-19
相关资源
最近更新 更多