powershell 非交互获取管理用户:权限不足,无法完成操作

sg2wtvxw  于 2022-11-10  发布在  Shell
关注(0)|答案(2)|浏览(202)

我遵循https://www.christianfrohn.dk/2022/04/23/connect-to-microsoft-graph-with-powershell-using-a-certificate-and-an-azure-service-principal/连接到Microsoft Graph,但收到以下错误。

Get-MgUser -Top 1

> Get-MgUser : Insufficient privileges to complete the operation.
> At line:1 char:1
> + Get-MgUser -Top 1
> + ~~~~~~~~~~~~~~~~~
>    + CategoryInfo          : InvalidOperation: ({ ConsistencyLe...ndProperty =  }: <>f__AnonymousType62`9) [Get-MgUser
>   _List1], RestException`1
>    + FullyQualifiedErrorId : > Authorization_RequestDenied,Microsoft.Graph.PowerShell.Cmdlets.GetMgUser_List1

据我所知,我需要同意这些许可。我找到了很多关于如何在互动会话中做到这一点的来源,但没有人说过如何在非互动会话中做到这一点。
我尝试将-Scope添加到连接字符串,但收到以下错误

Connect-MgGraph -ClientID [snip] -TenantId [snip] -CertificateThumbprint [snip] -Scopes 'User.Read.All'

> Connect-MgGraph : Parameter set cannot be resolved using the specified named parameters.
> At line:1 char:1
> + Connect-MgGraph -ClientID 19cb80c5-b355-42bc-a892-e73d11f57ef4 -Tenan ...
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    + CategoryInfo          : InvalidArgument: (:) [Connect-MgGraph], ParameterBindingException
>    + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.Graph.PowerShell.Authentication.Cmdlets.ConnectMgGraph

我该怎么做呢?

编辑

这就是我连接的方式

Connect-MgGraph -ClientId $clientId -TenantId $tenantId -CertificateThumbprint $thumbPrint

Welcome To Microsoft Graph!

API权限

谢谢

rqqzpn5f

rqqzpn5f1#

您的应用程序注册具有错误的权限。有两种类型的权限,delegated(又名作用域)和application(又名角色)。
参考:权限类型
对于“交互式”会话,您的应用程序将代表用户进行交互,因此使用delegated权限。
对于“非交互”会话,您的应用程序将充当其自身,因此它需要application类型的权限。
作为应用程序进行连接时(“非交互”),也不要指定-Scopes参数

h5qlskok

h5qlskok2#

要确定运行microsoft.graph模块的特定cmdlet所需的权限,可以使用find-mgGraphCommand cmdlet,例如:

(Find-MgGraphCommand -Command get-mguser).permissions

要确定将哪些权限分配给当前会话,可以使用get-mgcontext cmdlet,例如:

(get-mgcontext).scopes

如果运行交互式会话,则必须指定作用域,例如:

Connect-MgGraph -Scopes user.read.all

要使用证书在服务主体的上下文中连接,您可以执行以下操作:


# Get the certificate used as secret from the Windows certificate store

$cert = Get-ChildItem  -Path 'Cert:\LocalMachine\MY' | ?{$_.thumbprint -eq $CertificateThumbprint}

# establish connection

connect-mggraph -certificate $cert -tenantid [tenantId] -clientId [clientId]

顺便说一句。客户端ID=服务主体的对象ID

相关问题