我的网络应用程序 (
ConfidentialClientAplication
) 为我的用户执行一些后台任务:
Mail.ReadWrite
)$DYN365_BASE_URL/data/Companies
(使用 Connector.FullAccess
)(图1:App注册权限)
--
在我的 webb 应用程序中,用户单击按钮将其 MS365 租户与我的应用程序连接,使用授权代码流程请求所需的权限:
(图 2:同意屏幕)
我现在有一个
access_token
和一个 refresh_token
(使用 MSAL for Java)。
我现在可以成功了:
到目前为止,一切都很好。
--
现在,60 分钟后,我的
access_token
已过期,我需要使用 refresh_token
获取新的。所以,我就这么做了。
使用新的
access_token
我可以
AADSTS65001: The user or administrator has not consented to use the application.
--
首先,您似乎在这里混淆了 OAuth 流程。机密客户端仅适用于您拥有的
Mail.ReadWrite
之类的应用程序权限。
由于我在屏幕截图上看到使用同意,这意味着用户与您的应用程序交互并同意委派权限。如果您收到刷新令牌,应该有
offline_access
范围。
从屏幕截图来看,
Mail.ReadWrite
是仅应用程序的权限,这意味着如果您请求令牌,则不需要用户交互。
我的建议:
仅查看并添加对您的应用有意义的权限类型。理想的情况是机密客户端(应用程序权限)或公共客户端(委派权限)。这样,当用户交互(委托的所有权限)后请求令牌时,您将获得一个刷新令牌,该令牌将为您提供具有完全相同权限的访问令牌。
如果这不是解决方案,请共享身份验证体验中传递的范围以及令牌更新请求中传递的令牌。