如何通过PowerShell获取Azure租户用户MFA信息并完成权限授权
解决PowerShell调用Graph API获取MFA信息的权限问题
问题原因
你当前用Get-AzAccessToken获取的Token仅包含Azure资源管理相关权限,不具备访问Microsoft Graph中用户MFA方法所需的权限,因此触发accessDenied错误。Graph Explorer能成功是因为你手动授权了对应的Graph权限,而PowerShell中需要显式请求这些权限。
推荐解决方案:使用Microsoft Graph PowerShell模块
官方模块已封装权限处理和API调用,无需手动拼接请求:
- 安装Graph模块(首次使用):
Install-Module Microsoft.Graph.Identity.SignIns -Force -AllowClobber
- 连接Graph并请求权限:
执行后会弹出浏览器登录窗口,使用拥有读取用户MFA权限的账号(如全局管理员、身份验证管理员)登录:
Connect-MgGraph -Scopes "UserAuthenticationMethod.Read.All"
- 直接获取用户MFA信息:
$userUPN = "xx.xxxx@xxxxx.onmicrosoft.com" Get-MgUserAuthenticationMethod -UserId $userUPN
备选方案:手动获取带权限的Graph Token(适合自定义请求)
若坚持使用Invoke-RestMethod,需先获取包含正确权限的Token:
- 连接Graph并获取Token:
# 先连接Graph并授权所需权限 Connect-MgGraph -Scopes "UserAuthenticationMethod.Read.All" # 提取当前会话的有效Token $accessToken = (Get-MgContext).AccessToken
- 调用Graph API:
$userUPN = "xx.xxxx@xxxxx.onmicrosoft.com" $userObjectId = (Get-AzADUser -UserPrincipalName $userUPN).Id $graphApiUrl = "https://graph.microsoft.com/v1.0/users/$($userObjectId)/authentication/methods" $response = Invoke-RestMethod -Uri $graphApiUrl -Headers @{ Authorization = "Bearer $accessToken" } -Method Get -ErrorAction Stop
权限说明
- 读取**单个用户(自己)**的MFA方法:需
UserAuthenticationMethod.Read权限 - 读取其他用户的MFA方法:需
UserAuthenticationMethod.Read.All权限,且登录账号需具备对应角色(如全局管理员、身份验证管理员)
内容的提问来源于stack exchange,提问作者Ali Alvi
相关产品推荐
相关产品推荐

