Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Azure Developer CLI (azd) est un outil open source qui accélère le provisionnement et le déploiement des ressources d’application dans Azure.
Cet article utilise le modèle public d’application de fonction Azure pour les webhooks SharePoint pour déployer une application de fonction Azure qui se connecte à votre locataire SharePoint Online, pour inscrire et gérer des webhooks et traiter les notifications à partir de SharePoint.
Configuration requise
- Node.js 22
- Azure Functions Core Tools
- Azure Developer CLI (azd)
- Un abonnement Azure qui approuve le même annuaire Microsoft Entra ID que le locataire SharePoint
Autorisations requises pour provisionner les ressources dans Azure
Le compte exécutant azd doit avoir au moins les rôles suivants pour approvisionner correctement les ressources :
- Contributeur de rôle Azure : pour créer toutes les ressources nécessaires
- Administrateur Access Control en fonction du rôle Azure : pour attribuer des rôles (pour accéder au compte de stockage et à Application Insights) à l’identité managée de l’application de fonction
Déployer l’application de fonction dans Azure
Exécutez azd init à partir d’un dossier local (racine) vide :
azd init --template azd-functions-sharepoint-webhooksLorsque vous y êtes invité, entrez un nom d’environnement, par exemple spofuncs-quickstart . Dans azd, l’environnement est utilisé pour gérer un contexte de déploiement unique pour votre application.
Ouvrez le fichier infra/main.parameters.json et définissez les variables
TenantPrefixetsiteRelativePathpour qu’elles correspondent à votre locataire SharePoint.Consultez l’article Gérer les variables d’environnement pour gérer les variables d’environnement de l’azd.
Enfin, exécutez la commande azd up pour générer l’application, provisionner les ressources dans Azure et déployer le package d’application.
Accorder à l’application de fonction l’accès à SharePoint Online
L’authentification auprès de SharePoint est effectuée à l’aide DefaultAzureCredentialde , de sorte que les informations d’identification utilisées varient selon que l’application de fonction s’exécute localement ou dans Azure.
Si vous n’avez jamais entendu parler DefaultAzureCredentialde , vous devez vous familiariser avec son concept en vous référant à la section Utiliser DefaultAzureCredential pour plus de flexibilité dans chaînes d’informations d’identification dans la bibliothèque de client Azure Identity pour JavaScript.
Utilisation de son identité managée
DefaultAzureCredential utilise une identité managée pour s’authentifier auprès de SharePoint. Il peut s’agir de l’identité managée affectée par le système existante du service d’application de fonction ou d’une identité managée affectée par l’utilisateur.
Ce didacticiel part du principe que l’identité managée affectée par le système est utilisée.
Accorder l’autorisation d’API SharePoint Sites.Selected à l’identité managée
Accédez à votre application de fonction dans le Portail Azure> sélectionnez Identité et notez l’ID d’objet (principal) de l’identité managée affectée par le système.
Remarque
Dans ce tutoriel, il s’agit de d3e8dc41-94f2-4b0f-82ff-ed03c363f0f8.
Ensuite, utilisez l’un des scripts ci-dessous pour accorder à cette identité l’autorisation d’application uniquement Sites.Sélectionné sur l’API SharePoint :
Importante
Les scripts ci-dessous nécessitent au moins l’autorisation AppRoleAssignment.ReadWrite.All déléguée (nécessite le consentement de l’administrateur)
Utilisation du Kit de développement logiciel (SDK) Microsoft Graph PowerShell
# This script requires the modules Microsoft.Graph.Authentication, Microsoft.Graph.Applications, Microsoft.Graph.Identity.SignIns, which can be installed with the cmdlet Install-Module below:
# Install-Module Microsoft.Graph.Authentication, Microsoft.Graph.Applications, Microsoft.Graph.Identity.SignIns -Scope CurrentUser -Repository PSGallery -Force
Connect-MgGraph -Scope "Application.Read.All", "AppRoleAssignment.ReadWrite.All"
$managedIdentityObjectId = "d3e8dc41-94f2-4b0f-82ff-ed03c363f0f8" # 'Object (principal) ID' of the managed identity
$scopeName = "Sites.Selected"
$resourceAppPrincipalObj = Get-MgServicePrincipal -Filter "displayName eq 'Office 365 SharePoint Online'" # SPO
$targetAppPrincipalAppRole = $resourceAppPrincipalObj.AppRoles | ? Value -eq $scopeName
$appRoleAssignment = @{
"principalId" = $managedIdentityObjectId
"resourceId" = $resourceAppPrincipalObj.Id
"appRoleId" = $targetAppPrincipalAppRole.Id
}
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentityObjectId -BodyParameter $appRoleAssignment | Format-List
Utilisation de az cli dans Bash
managedIdentityObjectId="d3e8dc41-94f2-4b0f-82ff-ed03c363f0f8" # 'Object (principal) ID' of the managed identity
resourceServicePrincipalId=$(az ad sp list --query '[].[id]' --filter "displayName eq 'Office 365 SharePoint Online'" -o tsv)
resourceServicePrincipalAppRoleId="$(az ad sp show --id $resourceServicePrincipalId --query "appRoles[?starts_with(value, 'Sites.Selected')].[id]" -o tsv)"
az rest --method POST --uri "https://graph.microsoft.com/v1.0/servicePrincipals/${managedIdentityObjectId}/appRoleAssignments" --headers 'Content-Type=application/json' --body "{ 'principalId': '${managedIdentityObjectId}', 'resourceId': '${resourceServicePrincipalId}', 'appRoleId': '${resourceServicePrincipalAppRoleId}' }"
Accorder à l’identité managée un accès effectif à un site SharePoint
Accédez à Applications d’entreprise> Définissez le filtre Type d’application sur Identités managées sélectionnez votre identité managée > et notez son ID d’application.
Remarque
Dans ce tutoriel, il s’agit de 3150363e-afbe-421f-9785-9d5404c5ae34.
Ensuite, utilisez l’un des scripts ci-dessous pour lui accorder la gestion des autorisations d’application uniquement (minimum requis pour inscrire un webhook) sur un site SharePoint spécifique :
Importante
L’inscription d’application utilisée pour exécuter ces scripts doit avoir au moins les autorisations suivantes :
- Autorisation déléguée Application.ReadWrite.All dans le API Graph (nécessite le consentement de l’administrateur)
- Autorisation déléguée AllSites.FullControl dans l’API SharePoint (nécessite le consentement de l’administrateur)
Utilisation de PnP PowerShell
Connect-PnPOnline -Url "https://YOUR_SHAREPOINT_TENANT_PREFIX.sharepoint.com/sites/YOUR_SHAREPOINT_SITE_NAME" -Interactive -ClientId "YOUR_PNP_APP_CLIENT_ID"
Grant-PnPAzureADAppSitePermission -AppId "3150363e-afbe-421f-9785-9d5404c5ae34" -DisplayName "YOUR_FUNC_APP_NAME" -Permissions Manage
Utilisation de l’interface cli m365 dans Bash
targetapp="3150363e-afbe-421f-9785-9d5404c5ae34"
siteUrl="https://YOUR_SHAREPOINT_TENANT_PREFIX.sharepoint.com/sites/YOUR_SHAREPOINT_SITE_NAME"
m365 spo site apppermission add --appId $targetapp --permission manage --siteUrl $siteUrl
Appeler l’application de fonction
Pour des raisons de sécurité, lors de l’exécution dans Azure, l’application de fonction nécessite qu’une clé d’application passe le code du paramètre de chaîne de requête. Les clés d’application se trouvent dans la page Clés d’application du service d’application de fonction.
La plupart des fonctions HTTP prennent des paramètres facultatifs TenantPrefix et siteRelativePath. Si elles ne sont pas spécifiées, les valeurs des variables d’environnement de l’application sont utilisées.
Voici un exemple de script dans PowerShell pour appeler l’application de fonction :
# Edit those variables to match your environment
$funchost = "YOUR_FUNC_APP_NAME"
$code = "YOUR_HOST_KEY"
$listTitle = "YOUR_SHAREPOINT_LIST"
$notificationUrl = "https://${funchost}.azurewebsites.net/api/webhooks/service?code=${code}"
# List all the webhooks registered on a list
Invoke-RestMethod -Method GET -Uri "https://${funchost}.azurewebsites.net/api/webhooks/list?code=${code}&listTitle=${listTitle}"
# Register a webhook in a list
Invoke-RestMethod -Method POST -Uri "https://${funchost}.azurewebsites.net/api/webhooks/register?code=${code}&listTitle=${listTitle}¬ificationUrl=${notificationUrl}"
# Show this webhook registered on a list
Invoke-RestMethod -Method GET -Uri "https://${funchost}.azurewebsites.net/api/webhooks/show?code=${code}&listTitle=${listTitle}¬ificationUrl=${notificationUrl}"
# Remove the webhook from a list
# Step 1: Call the function /webhooks/show to get the webhook id
$webhookId = $(Invoke-RestMethod -Method GET -Uri "https://${funchost}.azurewebsites.net/api/webhooks/show?code=${code}&listTitle=${listTitle}¬ificationUrl=${notificationUrl}").Id
# Step 2: Call the function /webhooks/remove and pass the webhook id
Invoke-RestMethod -Method POST -Uri "https://${funchost}.azurewebsites.net/api/webhooks/remove?code=${code}&listTitle=${listTitle}&webhookId=${webhookId}"
Nettoyer les ressources dans Azure
Vous pouvez supprimer toutes les ressources créées par ce projet dans Azure en exécutant la commande azd.
Vous pouvez également supprimer le groupe de ressources qui a le nom de l’environnement azd par défaut.