MSGraph – SharePoint

Récupérer sous-sites

Récupérer l’ID dans Edm.Guid via
https://xxx.sharepoint.com/sites/xxx/_api/site/id

Puis sur graph explorer :
https://graph.microsoft.com/v1.0/sites/$Edm.Guid/sites

Suppression de droits API SharePoint

$ApiUrlSites = "https://graph.microsoft.com/v1.0/sites/xxx/permissions"
((Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $ApiUrlSites -Method Get)).value
((Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $ApiUrlSites -Method Get)).value.grantedToIdentitiesV2

Puis on supprime en reprenant l'Id :
$ApiUrlSitesDel = "https://graph.microsoft.com/v1.0/sites/xxx/permissions/$id"
((Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $ApiUrlSitesDel -Method Delete))

Restriction Sites.Selected

Pour restreindre l’accès d’une API à un seul site, on peut utiliser Sites.selected au lieu de Sites.FullControl.All

Etape 1 : Ajouter la permission Sites.selected
Si c’est une identité managée, voici le bout de code :

$TenantID="xxx"
# Microsoft Graph App ID (NE PAS MODIFIER)
$GraphAppId = "00000003-0000-0000-c000-000000000000"
# Nom de l'identité Managée (même nom que l'automation)
$DisplayNameOfMSI="xxx" 
# Déclaration de la permission à ajouter
$PermissionName = "Sites.Selected" 

# Si nécessaire, installation du module AzureAd puis connexion
#Install-Module AzureAD 
Connect-AzureAD -TenantId $TenantID 

# Application des droits
$MSI = (Get-AzureADServicePrincipal -Filter "displayName eq '$DisplayNameOfMSI'")
Start-Sleep -Seconds 10
$GraphServicePrincipal = Get-AzureADServicePrincipal -Filter "appId eq '$GraphAppId'"
$AppRole = $GraphServicePrincipal.AppRoles | `
Where-Object {$_.Value -eq $PermissionName -and $_.AllowedMemberTypes -contains "Application"}
New-AzureAdServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId `
-ResourceId $GraphServicePrincipal.ObjectId -Id $AppRole.Id

Etape 2 : Ajout du droit

Connexion à PnpOnline

Connect-PnPOnline -Url 'https://xxx-admin.sharepoint.com' -Interactive

Ajout des droits sur le site SharePoint :

Grant-PnPAzureADAppSitePermission -AppId $AppId -DisplayName $ManagedIdentity -Site 'https://xxx.sharepoint.com/sites/monequipe' -Permissions Write

Dans votre script, vous aurez besoin de l’ID du groupe. Il existe 3 moyens de l’avoir.
En PowerShell :

Import-Module Microsoft.Online.SharePoint.PowerShell -UseWindowsPowerShell
connect-sposervice -Url 'https://xxx-admin.sharepoint.com' -ModernAuth $true
(Get-spoSite -Identity https://xxx.sharepoint.com/sites/monsite).GroupId

Depuis un navigateur avec les permissions Sharepoint Administrator, via l’url suivante :

https://xxx.sharepoint.com/sites/xxx/_api/site/id

Ou en Graph, via DocId

https://graph.microsoft.com/v1.0/groups/$GroupId/drives

En cas de tentative d’accès à un autre SharePoint, vous aurez le message : (400) Bad Request

Upload 2 files