【问题标题】:System.UnauthorizedAccessException when trying to retrieve properties尝试检索属性时出现 System.UnauthorizedAccessException
【发布时间】:2018-02-21 15:59:47
【问题描述】:

当尝试通过/v1.0/users/{id}?$select=skills获取特定属性(例如skillsaboutMeresponsibilities)时

我收到以下错误消息:

{
    "error": {
        "code": "-2147024891, System.UnauthorizedAccessException",
        "message": "Zugriff verweigert. Sie haben keine Berechtigung, diesen Vorgang auszuführen oder auf diese Ressource zuzugreifen.",
        "innerError": {
            "request-id": "8a87ee26-b066-42fe-8458-1db74387a47b",
            "date": "2018-02-21T15:23:30"
        }
    }
}

当尝试获取“姓氏”、“邮件”等属性时,没有出现问题,我检索了所需的数据。

我通过 ADAL4J 获得我的令牌:

service = Executors.newFixedThreadPool(1); 
context = new AuthenticationContext(AUTHORITY, false, service); 
result = context.acquireToken("https://graph.microsoft.com", 
  new ClientCredential(CLIENT_ID, SECRET), null).get();
String token = result.getAccessToken();  

你知道如何在这里设置范围吗?

尝试通过 Postman 请求和范围获取令牌
https://graph.microsoft.com/.default 但得到了相同的结果。

我应该使用其他范围来代替.default吗?

注意:我关注了these instructions

【问题讨论】:

  • 您要求的范围是什么?
  • 我更新了关于您的范围问题的帖子。

标签: java azure-active-directory microsoft-graph-api


【解决方案1】:

我同时更改了应用权限,所以我不得不重做请求

https://login.microsoftonline.com/[tenant]/adminconsent?client_id=[client-id]&state=12345&redirect_uri=[redirect-uri]

在管理员接受新权限后,我能够访问其他用户属性。

【讨论】:

    【解决方案2】:

    您使用的 OAuth 流程是客户端凭据授权。客户端凭据与传统 OAuth 授权的不同之处在于没有用户身份验证。由于没有“用户”,因此也没有机会获得用户对您的范围的同意(用户同意)。这使您只有一个选择,即获得管理员的同意(管理员同意)。换言之,您在使用客户端凭据时始终需要管理员同意。

    我写了一篇文章,概述了用户和管理员同意之间的差异,这可能有助于解释这里发生了什么:Understanding the difference between User and Admin Consent

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      相关资源
      最近更新 更多