如何通过Azure CLI获取Azure AD用户及组信息并解决相关问题
问题与解决方案
问题描述
需要获取指定Azure Active Directory(AAD)组的成员数量、用户名等详细信息。此前通过以下命令流程可正常操作:
az account get-access-token --resource "https://cognitiveservices.azure.com" az login --username {user_name} --tenant {tenant_id} --password {access_token} az ad group member list --group {AAD_group_name}
但现在执行第二步登录命令时出现报错:
RuntimeError: WsTrust server returned error in RSTR: {'reason': 'ID3242: The security token could not be authenticated or authorized.', 'code': 'a:FailedAuthentication'}
尝试使用服务主体(SPN)登录时,收到报错:
Insufficient privileges to complete the operation
询问是否有其他通过Azure CLI与AAD交互获取所需信息的方式。
可行解决方案
方法1:直接使用用户凭据登录
跳过手动获取令牌的步骤,直接用用户的用户名和密码登录Azure CLI,CLI会自动管理令牌的刷新逻辑:
az login --username {user_name} --password {user_password} --tenant {tenant_id} az ad group member list --group {AAD_group_name}
自动化脚本中建议通过环境变量传入密码,避免明文暴露:
export AZURE_USER_PWD="your_user_password" az login --username {user_name} --password $AZURE_USER_PWD --tenant {tenant_id}
方法2:给服务主体分配对应权限
SPN登录提示权限不足,需为其配置读取AAD组及成员的权限:
- 进入Azure门户的Azure Active Directory > 应用注册,找到目标服务主体
- 切换到API权限,点击添加权限 > Microsoft Graph > 应用权限
- 搜索并添加
Group.Read.All和GroupMember.Read.All权限(遵循最小权限原则) - 点击授予管理员同意(需全局管理员权限)
- 完成权限配置后,用SPN登录并执行查询:
az login --service-principal --username {spn_client_id} --password {spn_client_secret} --tenant {tenant_id} az ad group member list --group {AAD_group_name}
方法3:修复原有令牌获取流程
之前获取的是认知服务的令牌,登录Azure CLI需使用Microsoft Graph(或Azure AD Graph)的资源令牌,修改第一步命令:
# 获取Microsoft Graph的访问令牌 az account get-access-token --resource "https://graph.microsoft.com" # 使用该令牌登录 az login --username {user_name} --tenant {tenant_id} --password {access_token} # 执行组查询 az ad group member list --group {AAD_group_name}
方法4:直接调用Microsoft Graph API
无需依赖Azure CLI登录,直接用令牌调用API获取组信息:
# 示例:用curl调用,替换{access_token}和{group_id} curl -H "Authorization: Bearer {access_token}" https://graph.microsoft.com/v1.0/groups/{group_id}/members?$select=id,displayName,userPrincipalName
该方式更适合自动化脚本场景,可直接解析返回的JSON数据获取所需信息。
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

