如何获取Azure AD应用名称与所有者信息?权限问题求助
解决Azure AD应用名称与所有者信息获取的权限问题
核心问题分析
你遇到的权限报错源于SDK与配置权限不兼容:azure-graphrbac Python包调用的是旧版Azure AD Graph API,而你配置的Microsoft.Directory/applications/allProperties/read和Microsoft.Directory/applications/owners/read是Microsoft Graph的自定义角色操作权限,二者不属于同一API体系,自然无法匹配生效。
两种解决方案
方案1:继续使用azure-graphrbac(不推荐,旧API已弃用)
需配置旧版Azure AD Graph对应的自定义操作权限:
- 在自定义角色JSON中添加以下权限:
Microsoft.AzureActiveDirectory/applicationObjects/allProperties/readMicrosoft.AzureActiveDirectory/applicationObjects/owners/read
- 确保应用被分配该自定义角色,且角色范围覆盖租户级目录。
方案2:切换到Microsoft Graph SDK(官方推荐)
旧版Azure AD Graph已停止更新,建议使用azure-identity搭配msgraph-sdk-python包,步骤如下:
- 权限配置:
保留你之前添加的Microsoft.Directory/applications/allProperties/read和Microsoft.Directory/applications/owners/read,或直接分配内置的Application.Read.All权限(若允许使用内置角色)。 - 示例代码:
from azure.identity import ClientSecretCredential from msgraph import GraphServiceClient # 初始化凭据 credential = ClientSecretCredential( tenant_id="你的租户ID", client_id="你的客户端ID", client_secret="你的客户端密钥" ) # 初始化Graph客户端 graph_client = GraphServiceClient(credential) # 获取指定应用基本信息 app_id = "目标应用ID" application = await graph_client.applications.by_application_id(app_id).get() print(f"应用名称: {application.display_name}") # 获取应用所有者列表 owners = await graph_client.applications.by_application_id(app_id).owners.get() print("应用所有者:") for owner in owners.value: owner_info = owner.display_name if hasattr(owner, 'user_principal_name'): owner_info += f" ({owner.user_principal_name})" print(f"- {owner_info}")
额外注意事项
- 权限分配后需等待15-30分钟才能全局生效,不要立即测试。
- 自定义角色的分配范围需设置为「目录(租户)」级,否则无法读取全局应用数据。
内容的提问来源于stack exchange,提问作者Vik
相关产品推荐
相关产品推荐

