尽管令牌正确,但用户未授权

问题描述 投票:0回答:1

我正在尝试将 D365FO 与第三方应用程序集成,我能够进行正确的设置并注册我的应用程序,获取令牌,如下所示:

我在开发机上使用

resource
作为D365FO的链接,即
https://usnconeboxax1aos.cloud.onebox.dynamics.com/
,读取D365FO数据如下图:

我想更改登录方式,所以我代表用户登录,使用密码,所以我禁用了Azure的安全细节(基于this),如下:

并成功获得登录用户的令牌,如下所示:

但是一旦我尝试获取我之前能够获取的相同数据,我得到了 401 unauthorized,尽管我正在使用

Admin
帐户登录:

azure odata dynamics-365-operations dynamics-ax7
1个回答
2
投票

错误

401 Unauthorized
通常会在您调用具有 invalid 受众的资源时发生。

当您使用

scope
作为 user.read openid profile offline_access 生成访问令牌时,受众将是 Microsoft Graph,它不适用于 D365FO。

我试图通过邮递员在我的环境中重现相同的内容并得到以下结果:

我注册了一个 Azure AD 应用程序并添加了相同的 API 权限,如下所示:

enter image description here

现在,我通过包含如下所示的

same
参数生成了授权类型为password的代币:

POST https://login.microsoftonline.com/organizations/oauth2/v2.0/token

client_id: <appID>
client_secret: <secret>
scope: user.read openid profile offline_access
grant_type: password
username: [email protected]
password: xxxxxxxxxxx

回复:

enter image description here

您可以通过将上面的访问令牌粘贴到jwt.ms中来解码它以检查观众。

当我解码访问令牌时,我得到 aud 声明为

00000003-0000-0000-c000-000000000000
(即 Microsoft Graph),如下所示:

enter image description here

如果您使用此令牌读取 D365FO 数据,您将收到 401 Unauthorized 错误,因为受众无效。

resolve 错误,您需要通过进行以下更改来生成具有

resource
值作为 D365FO 实例的 base URL 的访问令牌:

POST https://login.microsoftonline.com/organizations/oauth2/token

client_id: <appID>
client_secret: <secret>
resource: <base URL of your D365FO instance without the trailing '/'>
grant_type: password
username: [email protected]
password: xxxxxxxxxxx

在你的情况下,resource参数的值应该是

https://usnconeboxax1aos.cloud.onebox.dynamics.com

此令牌将具有 audience 与您的 D365FO 根 URL 相同。要确认这一点,您可以在 jwt.ms 中对其进行解码。如果您使用此令牌读取 D365FO 数据,它将起作用!

参考:

使用第三方实用程序测试服务 - 财务与运营 |动态 365 |微软

© www.soinside.com 2019 - 2024. All rights reserved.