使用 Pnp-Powershell 时需要什么类型的 accessToken scope/resourceType

What type of accessToken scope/resourceType do I need when using Pnp-Powershell

在 PNP 文档中显示: https://pnp.github.io/powershell/cmdlets/Connect-PnPOnline.html#example-13

您可以使用 Oauth2 AccessToken 访问资源: Connect-PnPOnline -Url https://contoso.sharepoint.com -AccessToken $token

当我尝试通过 Powershell 中的 Az Cli 获取访问令牌时... https://docs.microsoft.com/en-us/cli/azure/account?view=azure-cli-latest#az-account-get-access-token

$token=az account get-access-token --resource-type ms-graph --query accessToken 
$token=$token.Trim('"')

Connect-PnPOnline -Url https://mysharepointdomain.com/sites/SiteINeedToAccess -AccessToken $token

Get-PnPSiteCollectionAdmin                                                                        
Get-PnPSiteCollectionAdmin: The remote server returned an error: (401) Unauthorized.

当我使用带密码的 pfx 证书使用备用 Connect-PnPOnline 方法时,我可以正常访问资源。

我应该请求其他类型的访问令牌吗?

正如您提到的 "Connect-PnPOnline 使用带密码的 pfx 证书的方法" 工作正常。 请检查您是否在通过 Azure CLI 生成访问令牌时分配了必需的 权限范围

要验证范围, 使用 JSON Web Tokens - jwt.io 网站解码令牌。

如果 scp 属性不包括 SharePoint 在线权限 如:Sites.FullControl.AllSites.ReadWrite.All等,那么这可能会导致401未经授权的错误.

确保像下面那样授予 permissions

转到 Azure 门户 -> Azure Active Directory -> 你的应用程序 -> API 权限 -> 添加权限 -> SharePoint

如需了解更多信息,请参考下面的链接:

Azure app cannot access SharePoint v1 API - 401 unauthorized access error - Microsoft Q&A

pnp powershell - PnP Cmdlets / Provisioning: What are the minimal required permissions for basic SharePoint operations? - SharePoint Stack Exchange

更新:

正如您在评论中提到的,请注意 Get-PnPSiteCollectionAdmin 还使用具有限制的 legacy CSOM即使授予 Sites.FullControl.All 权限也无法更改。为避免这种情况,请继续使用带密码的 pfx 证书作为 Connect-PnPOnline 方法的解决方法!

参考: https://github.com/pnp/powershell/issues/305