尝试检索属性时出现System.UnauthorizedAccessException

时间:2018-02-21 15:59:47

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

尝试通过skills

获取特定属性(例如aboutMeresponsibilities/v1.0/users/{id}?$select=skills)时

我收到以下错误消息:

{
    "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();  

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

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

我应该使用其他范围而不是.default吗?

注意:我关注these instructions

2 个答案:

答案 0 :(得分:0)

我在此期间更改了应用权限,因此我不得不重做请求

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

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

答案 1 :(得分:0)

您使用的OAuth流是客户端凭据授权。客户端凭据与传统的OAuth授权不同,因为用户无需进行身份验证。由于没有"用户",因此也没有机会获得用户同意(用户同意)。这使您只有一个选项,获得管理员同意(管理员同意)。换句话说,在使用客户端凭据时,始终需要管理员同意。

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