microsoft-graph-api - 如何在 Microsoft Graph API 中筛选 appRoleAssignments
问题描述
我在我们的 Azure AD 租户中有一个企业应用程序,我想检查一个特定的组是否分配给这个应用程序。
要列出应用程序的所有 appRoleAssignments,我可以这样做:
GET /beta/servicePrincipals/{id}/appRoleAssignments
{id}
企业应用程序的 ID 在哪里。这将返回appRoleAssignment对象的列表。我想在特定组中过滤此列表,因为该列表可能非常大。我曾尝试使用$filter
查询参数,但似乎无法使其正常工作。我尝试了以下方法:
$filter=principalId eq '{groupId}'
这是行不通的。我收到此错误消息:
{
"error": {
"code": "BadRequest",
"message": "Invalid filter clause",
"innerError": {
"request-id": "<id>",
"date": "<date>"
}
}
}
有什么方法可以过滤列表吗?
通过执行以下请求,我可以通过获取分配给该组的所有 appRoleAssignments 来潜在地执行此操作:
GET /beta/groups/{groupId}/appRoleAssignments
但我似乎在这里遇到了同样的问题,没有办法用来$filter
过滤我想要检查的特定企业应用程序。
如果过滤不起作用,我可以使用任何其他端点,这样我就不必在客户端进行分页了吗?
解决方案
是的,这是可能的。
这里的混淆是由于在 Microsoft Graph beta 中,实体的principalId
和resourceId
属性被声明为,而不是更熟悉的.AppRoleAssignment
Edm.Guid
Edm.String
使用 Microsoft Graph 测试版
要使用 Microsoft Graph API(使用换行符以确保易读性)检索给定组的所有应用角色分配到给定资源应用:
GET https://graph.microsoft.com/beta/groups/{group-id}/appRoleAssignments
?$filter=resourceId eq {resource-id}
在哪里:
{group-id}
是组的对象 ID{resource-id}
是资源应用的服务主体对象 ID
重要提示
'
:注意周围没有单引号 ( ){resource-id}
。当被过滤的属性是 type 时,这是必需的Edm.Guid
。
使用示例值,此查询如下所示:
GET https://graph.microsoft.com/beta/groups/75c647eb-8ff0-478d-b131-6c1bd4071841/appRoleAssignments
?$filter=resourceId eq ddd57b26-e13e-4db4-93d3-996f382251df
我还想借此机会澄清我在问题中注意到的可能的混淆。使用 Microsoft Graph 测试版:
- 用户、组和服务主体上的
appRoleAssignments
导航将返回已授予用户、组或服务主体的应用角色分配(即,用户/组/服务主体是principalId
返回的AppRoleAssignment
)。 - 服务主体上的
appRoleAssignedTo
导航将返回应用程序角色分配,其中所讨论的服务主体是公开应用程序角色的资源应用程序(即服务主体是resourceId
返回的AppRoleAssignment
)。
使用 Azure AD 图形 1.6
注意:通常,建议使用 Microsoft Graph。如果该功能在 Microsoft Graph v1.0 上不可用并且您需要生产就绪 API,则仅使用 Azure AD Graph。您应该计划在 v1.0 中提供该功能后立即迁移到 Microsoft Graph。
要使用 Azure AD Graph API(为易读而使用换行符)检索给定组的所有应用角色分配给给定资源应用:
GET https://graph.windows.net/{tenant-id}/groups/{group-id}/appRoleAssignments
?$filter=resourceId eq guid'{resource-sp-id}'
&api-version=1.6
在哪里:
{tenant-id}
是租户 ID 还是经过验证的域名{group-id}
是组的对象 ID{resource-sp-id}
是资源应用的服务主体对象 ID
推荐阅读
- ios - 如何避免firestore中的dup文件?
- python - 提高 Tesseract 精度
- mysql - 在 SQL 中可以进行这种连接吗?
- android - 反应原生地图:onPress 标记事件是延迟
- javascript - WebAssembly 中 call_indirect 的错误结果
- javascript - NetSuite:TypeError record.createCurrentLineItemSubrecord 不是函数?
- c - 如何实施独特性检查
- javascript - 数据显示正确,但控制台显示“无法读取未定义的属性‘映射’”
- python - Django 未使用的导入语句:virtualenv 问题
- bash - 如何为命令“cd ~1”创建 bash 别名