java 如何授予客户端应用程序对microsoft azure中请求的作用域的访问权限

eoxn13cs  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(166)

我收到此错误
请求交互异常:
美国航空航天学会70000:请求被拒绝,因为请求的一个或多个作用域未经授权或已过期。用户必须首先登录并授予客户端应用程序对请求的作用域的访问权限。
跟踪ID:添加5eedb-86d5 - 41bc-bad3 - 129298e3ca00
相关性ID:1d2ab508 - 8ec6 - 49d7-氨基丁酸-d1b8饲料
我在任何组织目录(任何Azure AD目录-多租户)的帐户和个人Microsoft帐户(例如Skype、Xbox)Azure帐户中注册应用

    • API权限:**

委托人:

  • Calendars.Read
  • Calendars.ReadWrite
  • 离线访问
  • 开放的
  • 剖面
  • User.Read
  • User.Read.All
  • 电子邮件
  • Mail.Read

适用范围:

  • Calendars.Read
  • Calendars.ReadWrite

我在Azure门户中提供了所需的权限和范围(公开API),但仍然收到此错误。我尝试解决此错误超过一天,我不明白我做错了什么?
用户登录时未询问日历的权限。
我使用了msal4j版本1.6.1依赖项

如何解决此错误?

2wnc66cl

2wnc66cl1#

我已经通过在AuthorizationRequestUrlParameters中添加Calendars.ReadWrite作用域解决了这个问题
在下面的字符串updatedScopes中,我传递了null,所以它被认为是微软的默认范围,不要求日历权限。

String updatedScopes = scope == null ? "Calendars.ReadWrite" : scope;
        
PublicClientApplication pca = PublicClientApplication.builder(clientId).authority(authority).build();
AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters
.builder(redirectURL,Collections.singleton(updatedScopes))
.responseMode(ResponseMode.QUERY)
.prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce)
.claimsChallenge(claims).build();

相关问题