我很感激在我之前有很多人问过这类问题(也许微软有什么原因?),但我还没有能够找出解决我的问题从阅读那些。
我试图从Postman(AAD auth)调用Dynamics 365 BC API(v.2.0),我尽可能地遵循描述,尽管它们在一些地方似乎不同步。https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-develop-connect-apps
授权和接收令牌的部分工作正常,尽管需要一些时间才能正确完成,而且我必须使用Fiddler才能真正看到错误消息。但是我让它工作,所以Postman现在可以检索一个令牌并存储它以供以后使用。
不起作用的部分是对Dynamics BC API的实际调用。当我尝试使用检索到的令牌调用Dynamics BC API时,我不断收到**401“未经授权”、“提供的凭据不正确”**错误。
我不知道为什么会这样也许应用程序配置错误,或者URL不正确,我真的不明白。
我试图调用“https://api.businesscentral.dynamics.com/v2.0/production/api/v2.0“,我相信它应该给予我一个可用的API列表,但如上所述,401。
当我已经成功地从Azure中检索到令牌时,这可能是什么原因?
更新1
我正在研究jwt token,对这部分很好奇,因为它可能是错误的,除非我误解了描述。它说,如果令牌是由v2.0端点发出的,令牌的“iss”部分应该以“/v2.0”结尾,而这里似乎不是这样(见图)。
我使用的Postman Auth URL是:https://login.microsoftonline.com/98...73/oauth2/v2.0/authorize
Postman 访问令牌URL:https://login.microsoftonline.com/98...73/oauth2/v2.0/token
所以这里可能有问题?
更新2
好了,我把Postman中的作用域更改为和你一样,现在我得到提示,以我创建的名称授予对应用程序的访问权限,这很好。据我所知,这是关于范围没有提到的指南文章,而 Postman 要求一个范围,所以我创建了一个和使用-显然这是不正确的,应该在该指南文章(微软)更新。
然而,当我尝试检索可用的API时,仍然得到一个奇怪的响应。
{
"error": {
"code": "Internal_CompanyNotFound",
"message": "The specified company ID, 98...73, does not exist. CorrelationId: 434d...235d."
}
}
更新3
删除该错误消息,这是为了尝试检索公司,也许该请求有问题。
对可用API的请求现在起作用了--似乎整个问题都是关于指南文章中没有涉及的所需范围。
谢谢你的帮助卡尔!:)
更新4
但有些事情还是很奇怪。如果我尝试指南文章中提到的请求以获取公司“endpoint/companies”,我会按预期收到CRONUS公司的响应,但如果我随后尝试调用“endpoint/companies(cronus-company-id)/customers”以获取CRONUS的客户,则会收到401“Unauthorized”,“The credentials provided are incorrect”。如果我试图为CRONUS获取详细信息,也会发生同样的情况。我不明白为什么,因为代币刚刚被证明是有效的...
2条答案
按热度按时间gkn4icbw1#
显然,您的令牌是错误的,您的
scope
设置不正确。你可以根据我的配置来配置你的 Postman 。范围应设置为:https://api.businesscentral.dynamics.com/.default
。解析令牌:
5kgi1eie2#
我遇到了这个错误,并将其追溯到Azure应用程序注册设置中的“重定向URI”。它被设置为“https://localhost:8080/login”,我认为这可能适合BC的内部安装。我在云端工作。我把它改为“https://businesscentral.dynamics.com/“,这样就解决了我的问题。