使用托管身份的Azure Function(PowerShell)读取AAD用户权限不足问题
问题:Azure Function托管身份读取AAD用户遭遇权限不足错误
我尝试通过启用托管身份的Azure Function(PowerShell)读取Azure Active Directory(AAD)中的用户,代码如下:
Import-Module AzureAD -UseWindowsPowerShell Connect-AzAccount -identity $context = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile.DefaultContext $graphToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, "https://graph.microsoft.com").AccessToken $aadToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, "https://graph.windows.net").AccessToken $body = "Hi I'm $($context.Account.Id)" Connect-AzureAD -AadAccessToken $aadToken -AccountId $context.Account.Id -TenantId $context.tenant.id $allUsers = Get-AzureADUser -All $True
已为托管身份配置相关权限,但执行时出现错误:
Error occurred while executing GetUsers Code: Authorization_RequestDenied Message: Insufficient privileges to complete the operation
请问是否缺少读取AAD用户所需的权限?
解决方案
1. 确认权限类型与范围
你的代码使用的是Azure AD Graph(端点https://graph.windows.net),需要为托管身份配置对应的应用权限(而非委托权限):
- 所需权限:Azure AD Graph的
Directory.Read.All(应用权限) - 注意:后台服务(如Azure Function托管身份)必须使用应用权限,委托权限仅适用于有用户交互的场景。
2. 确保已授予管理员同意
配置权限后,必须点击授予管理员同意按钮,应用权限才能生效。如果未执行此操作,即使权限已添加,托管身份也无法使用该权限。
3. 代码优化(推荐改用Microsoft Graph)
Azure AD Graph已被微软弃用,建议迁移到Microsoft Graph模块,代码更简洁且更符合官方规范:
# 导入Microsoft Graph模块(需提前在Function中部署该模块) Import-Module Microsoft.Graph.Users # 通过托管身份连接Microsoft Graph Connect-MgGraph -Identity # 获取所有用户 $allUsers = Get-MgUser -All
使用Microsoft Graph时,需为托管身份配置Microsoft Graph的User.Read.All或Directory.Read.All应用权限,并授予管理员同意。
4. 权限验证步骤
- 登录Azure门户,找到你的Azure Function的托管身份(系统分配或用户分配)
- 进入API权限页面,确认已添加对应Graph的应用权限
- 检查权限状态是否为已授予(若显示“需要管理员同意”,则点击授予按钮)
内容的提问来源于stack exchange,提问作者KEM
相关产品推荐
相关产品推荐

