天蓝色图形Users.get(principalID)抛出Request_ResourceNotFound

时间:2019-01-08 11:54:51

标签: javascript node.js azure azure-active-directory azure-ad-graph-api

我正在尝试通过Node.js获取资源组的IAM列表。返回的列表包含用户ID而不是用户名,因此我试图通过用户ID来获取用户名。

const authorizationManagement = require('azure-arm-authorization');
const GraphkManagementClient = require('azure-graph');
const authorizationClient = new authorizationManagement(credentials, subscriptionId);
const graphClient = new GraphkManagementClient(credentials, tenantId);

let iamList = client.roleAssignments.listForResourceGroup(workspaceName);

for (let i in iamList) {
    const user = graphClient.users.get(iamList[i].principalId);
    iamList[i].principalId = user;
}

return iamList;

但行:

const user = graphClient.users.get(iamList[i].principalId);

抛出:

  

Request_ResourceNotFound:消息:“资源   'b175c95c-e50f-5c46-0b0d-d9f7106d0873'不存在或其中之一   查询的参考属性对象不存在。”

1 个答案:

答案 0 :(得分:2)

角色分配本身由以下组成:

  • 安全主体ID(用户,组,服务主体等。无论您要将角色分配给什么)
  • 角色定义ID(您分配的角色的标识符,例如该角色的贡献者,所有者或自定义RBAC角色)
  • 范围(分配此角色的范围,例如在订阅级别或特定资源组)

Microsoft Docs

上对此概念进行了详细的解释。

进入此处类似的角色分配列表时,响应对象包含prinicipalId但不包含principalType,以指示它是用户,组,服务主体还是MSI。 因此,查询此主体的一种安全方法是不假定任何特定类型,而只是查找具有该ID的对象。

在同一软件包getObjectsByObjectIds中可用的

azure-graph方法(documentation)可以帮助您。在后台使用的Azure AD Graph API可能是getObjectsByObjectIds

一个旁节点,值得一提的是,这个问题与another SO thread密切相关,因此在这里引用它可以为将来阅读此书的人提供帮助。

相关问题