Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oauth 2.0 401关于OData呼叫D365FO_Oauth 2.0_Azure Active Directory_Odata_Microsoft Dynamics_Php Curl - Fatal编程技术网

Oauth 2.0 401关于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

我正在尝试进行OData调用以检索D365FO数据实体。

在我的浏览器中登录到D365FO时,此调用有效

  • 我在PHP工作
  • 我已在Azure Active Directory中注册了我的应用程序
  • 我已经为我的应用程序提供了API权限
  • 我已在D365FO中向具有管理员权限的用户(与成功的浏览器调用使用的用户相同)注册了我的应用程序
  • 我能够获得身份验证令牌。
    • 其“aud”字段为“”
    • 其“appid”字段与应用程序的Azure广告注册字段匹配
    • 其“角色”字段仅包括“Connector.FullAccess”
  • 我在PHP中使用curl发出OData GET请求。我使用上面列出的URL,我的标题是
响应为“401未经授权”


有没有人知道出了什么问题,或者我如何找到更多关于失败的信息?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
]);