为Site.Selected权限的Azure应用注册配置SharePoint站点权限遇错求助
错误原因分析
报错Either scp or roles claim need to be present in the token说明执行命令的应用身份令牌中缺少必要的权限声明:
- 证书认证的PnP操作属于应用身份模式,需要令牌包含
roles声明(对应应用权限),而非委派权限的scp声明。 - 你尝试的两种方式都存在权限配置或命令语法问题:
- 直接用Site.Selected权限的应用执行:该权限仅允许应用访问被授权的站点,无权限给自己分配站点权限。
- 用高权限应用执行:要么权限未正确配置/授权,要么命令存在语法错误。
解决步骤
1. 确保高权限应用的权限配置正确
用来执行分配操作的高权限应用需要:
- 在Azure AD中添加SharePoint Online > 应用权限 > Sites.FullControl.All(最低要求为Sites.Manage.All,推荐用FullControl.All)。
- 点击授予管理员同意,确保权限生效。
2. 修正命令语法错误
你第二次执行的命令存在两处语法错误:
Sites.Seleced拼写错误,应为Sites.Selected。Get-PnPAzureADAppSitePermission的AppIdentity参数后多了一个引号,导致参数解析失败。
3. 正确的命令示例
# 配置参数 $siteUrl = "https://your-domain.sharepoint.com/sites/integration-prod" $highPrivilegeClientId = "高权限应用的Client ID" $highPrivilegeCertThumbprint = "高权限应用的证书指纹" $tenant = "your-domain.onmicrosoft.com" $targetAppClientId = "Site.Selected权限应用的Client ID" $permissionDisplayName = "SPGPIntegration-Test" # 连接到SharePoint站点(使用高权限应用) Connect-PnPOnline -Url $siteUrl -ClientId $highPrivilegeClientId -Thumbprint $highPrivilegeCertThumbprint -Tenant $tenant # 直接授予FullControl权限(无需先授Write再修改) $permission = Grant-PnPAzureADAppSitePermission -Permissions "FullControl" -Site $siteUrl -AppId $targetAppClientId -DisplayName $permissionDisplayName # 验证权限(可选) Get-PnPAzureADAppSitePermission -AppIdentity $targetAppClientId
4. 验证令牌权限
连接成功后,执行以下命令检查令牌是否包含roles声明:
$token = Get-PnPAccessToken $tokenPayload = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($token.Split('.')[1].PadRight($token.Split('.')[1].Length + ($token.Split('.')[1].Length % 4), '='))) $tokenPayload | ConvertFrom-Json
查看输出中的roles字段,确认包含Sites.FullControl.All或对应的权限值。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

