AADSTS65001 错误:60 分钟/令牌刷新后出现 Dynamics 365 OData 访问问题

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

我的网络应用程序 (

ConfidentialClientAplication
) 为我的用户执行一些后台任务:

  1. 轮询电子邮件收件箱中的新邮件并导入它们 - 使用 Microsoft Graph API(使用
    Mail.ReadWrite
  2. 轮询 Dynamics 365 Finance and Operations 数据以获取新的/删除的/更改的数据 - 使用 OData 端点,例如
    $DYN365_BASE_URL/data/Companies
    (使用
    Connector.FullAccess

此处提供了应用程序正在使用的权限的屏幕截图以供参考:

(图1:App注册权限)

--

在我的 webb 应用程序中,用户单击按钮将其 MS365 租户与我的应用程序连接,使用授权代码流程请求所需的权限:

图 2:同意屏幕

我现在有一个

access_token
和一个
refresh_token
(使用 MSAL for Java)。 我现在可以成功了:

  • 阅读电子邮件
  • 阅读 Dynamics 365 OData

到目前为止,一切都很好。

--

现在,60 分钟后,我的

access_token
已过期,我需要使用
refresh_token
获取新的。所以,我就这么做了。

使用新的

access_token
我可以

  • 仍然成功阅读电子邮件
  • 但是尝试读取 Dynamics 365 OData,我收到异常:
    AADSTS65001: The user or administrator has not consented to use the application.

--

  • 为什么?
  • 我可以更改哪些内容以在 60 分钟后保持对 Dynamics 365 OData 的访问?
azure microsoft-dynamics microsoft365 msal
1个回答
1
投票

首先,您似乎在这里混淆了 OAuth 流程。机密客户端仅适用于您拥有的

Mail.ReadWrite
之类的应用程序权限。

由于我在屏幕截图上看到使用同意,这意味着用户与您的应用程序交互并同意委派权限。如果您收到刷新令牌,应该有

offline_access
范围。

从屏幕截图来看,

Mail.ReadWrite
是仅应用程序的权限,这意味着如果您请求令牌,则不需要用户交互。

我的建议:

仅查看并添加对您的应用有意义的权限类型。理想的情况是机密客户端(应用程序权限)或公共客户端(委派权限)。这样,当用户交互(委托的所有权限)后请求令牌时,您将获得一个刷新令牌,该令牌将为您提供具有完全相同权限的访问令牌。

如果这不是解决方案,请共享身份验证体验中传递的范围以及令牌更新请求中传递的令牌。

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