Oauth 2.0 401关于OData呼叫D365FO
我正在尝试进行OData调用以检索D365FO数据实体。Oauth 2.0 401关于OData呼叫D365FO,oauth-2.0,azure-active-directory,odata,microsoft-dynamics,php-curl,Oauth 2.0,Azure Active Directory,Odata,Microsoft Dynamics,Php Curl,我正在尝试进行OData调用以检索D365FO数据实体。 在我的浏览器中登录到D365FO时,此调用有效 我在PHP工作 我已在Azure Active Directory中注册了我的应用程序 我已经为我的应用程序提供了API权限 我已在D365FO中向具有管理员权限的用户(与成功的浏览器调用使用的用户相同)注册了我的应用程序 我能够获得身份验证令牌。 其“aud”字段为“” 其“appid”字段与应用程序的Azure广告注册字段匹配 其“角色”字段仅包括“Connector.FullAc
在我的浏览器中登录到D365FO时,此调用有效
- 我在PHP工作
- 我已在Azure Active Directory中注册了我的应用程序
- 我已经为我的应用程序提供了API权限
- 我已在D365FO中向具有管理员权限的用户(与成功的浏览器调用使用的用户相同)注册了我的应用程序
- 我能够获得身份验证令牌。
- 其“aud”字段为“”
- 其“appid”字段与应用程序的Azure广告注册字段匹配
- 其“角色”字段仅包括“Connector.FullAccess”
- 我在PHP中使用curl发出OData GET请求。我使用上面列出的URL,我的标题是
有没有人知道出了什么问题,或者我如何找到更多关于失败的信息?D365FO中是否有我可以查找尝试日志的地方?资源似乎不正确。它应该是不带尾随“/”的实例的基本URL 您的“aud”字段是
https://erp.dynamics.com
。在这种情况下,它应该是您的[根URL]。像这样:
当您将请求发布到
https://login.microsoftonline.com/[租户ID]/oauth2/token
您有什么流程
可以执行?我怀疑您使用AuthorizationCode而不是AccessToken进行日志记录请参见Azure应用程序中的日志部分。我正在使用web应用程序的服务对服务。我通过将我的客户端ID和客户端密码传递给login.microsoftonline.com//oauth2/token来获取访问令牌。在Azure应用程序(portal.Azure.com)中,我发现了一个“活动日志”和一个“操作日志(经典)”第一个没有记录。第二个错误页面显示“未找到”。您是否已在D365 FO系统管理>安装>Azure Active Directory应用程序中注册了外部应用程序?@AllenWu,是的,我已在D365 FO中注册了该应用程序。我将其分配给了一个具有管理员权限的用户,该用户与我在web浏览器中成功调用OData时使用的帐户相同。谢谢。您是对的,我的“aud”字段包含了错误的值。我删除了范围:https://erp.dynamics.com/.default
来自我的令牌请求帖子标题,并添加了资源:[BaseURL]
。起初,我收到了400个错误请求
。我从我的令牌请求URL中删除了v2.0
(我现在意识到上面列出的URL不是我实际使用的URL),并且一切正常。是的<代码>资源适用于v1.0,而范围适用于v2.0。很高兴知道这个问题已经解决:)
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Accept: application/json',
'OData-MaxVersion: 4.0',
'OData-Version: 4.0',
'Authorization: Bearer ' . $this->accessToken
]);