reseau:cloud:azure:configurerapppoursharepoint
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| reseau:cloud:azure:configurerapppoursharepoint [2026/04/05 22:08] – créée techer.charles_educ-valadon-limoges.fr | reseau:cloud:azure:configurerapppoursharepoint [2026/04/05 23:35] (Version actuelle) – [Créer un dossier dans le site SharePoint] techer.charles_educ-valadon-limoges.fr | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ==== Infrastructure réalisée | + | ====== Configurer une application enregistrée dans Entra ID pour gérer une équipe Sharepoint ====== |
| - | Documenso | + | ===== Inscription d'une application ===== |
| - | <WRAP center round info> | ||
| - | La création d’applications pour Microsoft 365, pour accéder aux données et services de Microsoft 365, ou pour permettre aux utilisateurs de se connecter à l' | ||
| - | |||
| - | L' | ||
| Une inscription d’application dans Entra se fait : | Une inscription d’application dans Entra se fait : | ||
| * depuis le **portail Azure**, | * depuis le **portail Azure**, | ||
| * en **CLI/ | * en **CLI/ | ||
| - | </ | + | |
| ===== Installer le module Microsoft.Graph de Powershell===== | ===== Installer le module Microsoft.Graph de Powershell===== | ||
| Ligne 18: | Ligne 14: | ||
| ==== Installer Microsoft.Graph de Powershell ==== | ==== Installer Microsoft.Graph de Powershell ==== | ||
| - | + | | |
| - | | + | |
| * permissions API (Microsoft Graph) : Sites.Selected (Application) | * permissions API (Microsoft Graph) : Sites.Selected (Application) | ||
| - | | + | |
| < | < | ||
| Ligne 35: | Ligne 30: | ||
| * Portail Azure => Entra ID | * Portail Azure => Entra ID | ||
| * Inscription d' | * Inscription d' | ||
| - | * Nom : minio-S3 | + | * Nom : app |
| * Locataire unique seulement | * Locataire unique seulement | ||
| * S' | * S' | ||
| Ligne 42: | Ligne 37: | ||
| * Tenant ID | * Tenant ID | ||
| * Client ID | * Client ID | ||
| - | * Ajouter un secret Client | + | * l' |
| * Ajouter la permission Microsoft Graph : | * Ajouter la permission Microsoft Graph : | ||
| * Autorisations d' | * Autorisations d' | ||
| * Sites.Selected | * Sites.Selected | ||
| - | * Sites.FullControl.All (temporaire pour attribuer l' | ||
| - | * Files.Read.All | ||
| - | * Files.ReadWrite.All | ||
| - | |||
| <WRAP center round> | <WRAP center round> | ||
| - | Les permissions **Files.Read.All** et **Files.ReadWrite.All** donnent l’accès à toutes les bibliothèques pour lesquelles l'App est autorisée, mais la permission **Sites.Selected** restreint l' | + | La permission **Sites.Selected** restreint l' |
| </ | </ | ||
| <WRAP center round info> | <WRAP center round info> | ||
| - | Une autorisation d' | + | Une autorisation d' |
| * L' | * L' | ||
| * Nécessite un consentement administrateur. | * Nécessite un consentement administrateur. | ||
| </ | </ | ||
| - | * Grant admin consent. | + | * Demander le consentement de l'administrateur. |
| - | + | ||
| - | * Adresse email 0365 utilisée pour l’envoi | + | |
| ==== En CLI ==== | ==== En CLI ==== | ||
| Ligne 85: | Ligne 74: | ||
| < | < | ||
| - | $app = New-MgApplication -DisplayName "Minio-Sharepoint" | + | $app = New-MgApplication -DisplayName "Application" |
| </ | </ | ||
| Ligne 94: | Ligne 83: | ||
| </ | </ | ||
| ===== Autoriser l'app enregistrée à mettre à jour les dossiers de l' | ===== Autoriser l'app enregistrée à mettre à jour les dossiers de l' | ||
| - | Cela ne peut se faire depuis l' | + | Cela ne peut pas se faire depuis l' |
| Ligne 103: | Ligne 92: | ||
| < | < | ||
| $cert = New-SelfSignedCertificate ` | $cert = New-SelfSignedCertificate ` | ||
| - | -Subject "CN=minio-s3" ` | + | -Subject "CN=applicaton" ` |
| - | -CertStoreLocation " | + | -CertStoreLocation " |
| -KeySpec Signature ` | -KeySpec Signature ` | ||
| -KeyUsage DigitalSignature ` | -KeyUsage DigitalSignature ` | ||
| - | -KeyExportPolicy | + | -KeyExportPolicy |
| -HashAlgorithm SHA256 ` | -HashAlgorithm SHA256 ` | ||
| -KeyLength 2048 ` | -KeyLength 2048 ` | ||
| Ligne 118: | Ligne 107: | ||
| </ | </ | ||
| - | * Notez l' | + | * Notez l' |
| < | < | ||
| Ligne 124: | Ligne 113: | ||
| </ | </ | ||
| - | * Vérifier que le certificat est BIEN présent au BON endroit dans Cert:\LocalMachine\My | + | * Vérifier que le certificat est BIEN présent au BON endroit dans Cert:\CurrentUser\My |
| < | < | ||
| - | Get-Item " | + | Get-Item " |
| </ | </ | ||
| Ligne 133: | Ligne 122: | ||
| < | < | ||
| - | $cert = Get-Item " | + | $cert = Get-Item " |
| $cert.HasPrivateKey | $cert.HasPrivateKey | ||
| </ | </ | ||
| Ligne 139: | Ligne 128: | ||
| $cert.HasPrivateKey doit renvoyer True | $cert.HasPrivateKey doit renvoyer True | ||
| - | * exporter le certificat | + | |
| + | | ||
| < | < | ||
| + | Export-Certificate ` | ||
| + | -Cert " | ||
| + | -FilePath " | ||
| + | </ | ||
| - | Export-PfxCertificate ` | + | * importer le certificat dans l' |
| - | -Cert $cert ` | + | |
| - | -FilePath " | + | |
| - | -Password (ConvertTo-SecureString -String " | + | |
| - | </ | + | |
| - | + | ||
| - | | + | |
| < | < | ||
| - | Import-PfxCertificate | + | Connect-MgGraph |
| - | -FilePath | + | -TenantId |
| - | -CertStoreLocation Cert: | + | -ClientId "< |
| - | -Password (ConvertTo-SecureString -String | + | -CertificateThumbprint |
| + | |||
| + | => Résultat attendu | ||
| + | Plain TextWelcome To Microsoft Graph! | ||
| </ | </ | ||
| - | * vérifier | + | |
| < | < | ||
| - | Get-ChildItem Cert: | + | Get-MgContext |
| - | Where-Object Thumbprint -eq "< | + | |
| - | </ | + | |
| - | * Export du certificat PUBLIC à importer dans Entra ID | + | => on doit voir : |
| - | <code> | + | ClientId |
| - | Export-Certificate ` | + | TenantId |
| - | -Cert "Cert:\LocalMachine\My\$($cert.Thumbprint)" | + | Scopes |
| - | | + | AuthType |
| + | TokenCredentialType | ||
| + | CertificateThumbprint | ||
| </ | </ | ||
| - | ==== Installer PowerShell 7 ==== | + | ==== Donner accès à l' |
| - | ==== Installer le module Microsoft.Graph ==== | + | |
| - | | + | |
| - | * permissions API (Microsoft Graph) : Sites.Selected (Application) | + | |
| - | + | ||
| - | * ouvrir une session Powershell en tant, qu' | + | |
| < | < | ||
| - | Install-Module Microsoft.Graph | + | # deconnexion |
| - | Import-Module Microsoft.Graph | + | Disconnect-MgGraph |
| - | </ | + | |
| + | # Connexion admin | ||
| + | Connect-MgGraph -Scopes " | ||
| - | * script Powershell pour se conncter t etest la création d'un dossier | + | # Récupérer le site |
| + | $site = Get-MgSite -SiteId " | ||
| - | <WRAP center round important> | + | # Donner accès controle total à l' |
| - | Il est important de se connecter en tant qu' | + | New-MgSitePermission ` |
| - | </WRAP> | + | -SiteId $site.Id ` |
| + | -Roles " | ||
| + | -GrantedToIdentities @{ | ||
| + | Application = @{ | ||
| + | Id = "ID application" | ||
| + | DisplayName = " | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | * Se reconnecter en AppOnly : | ||
| < | < | ||
| - | ############################################################ | + | Connect-MgGraph ` |
| - | # CONFIGURATION pour l' | + | |
| - | ############################################################ | + | |
| + | -CertificateThumbprint " | ||
| + | </ | ||
| - | $TenantId | + | * Puis Tester l’accès au site précis: |
| - | $AppId | + | |
| - | $Thumbprint = "EMPREINTE_DU_CERTIFICAT" | + | < |
| + | Get-MgSite -SiteId | ||
| + | </ | ||
| - | $SitePath | ||
| - | $NewFolderName = " | ||
| + | ==== Créer un dossier dans le site SharePoint ==== | ||
| + | * Identifier le site SharePoint en itilisant le chemin direct : | ||
| - | $SitePath | + | < |
| - | $NewFolderName = " | + | $site = Get-MgSite -SiteId |
| + | $site.Id | ||
| - | ############################################################ | + | => Afficher le GUID du site du type : |
| - | # ÉTAPE 1 – OBTENIR UN TOKEN D’APPLICATION (CLIENT CREDENTIALS) | + | xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| - | ############################################################ | + | </ |
| - | Write-Host " | + | * Récupérer le drive du site (Documents) : chaque site a une document library principale. |
| - | $cert = Get-Item " | + | < |
| - | + | $drive = Get-MgSiteDrive | |
| - | $assertion = [Microsoft.Identity.Client.ConfidentialClientApplicationBuilder]:: | + | $drive.Id |
| - | WithTenantId($TenantId). | + | |
| - | WithCertificate($cert). | + | |
| - | Build() | + | |
| - | + | ||
| - | $tokenResult = $assertion.AcquireTokenForClient(@(" | + | |
| - | ExecuteAsync().GetAwaiter().GetResult() | + | |
| - | + | ||
| - | $Headers = @{ | + | |
| - | Authorization = " | + | |
| - | } | + | |
| - | + | ||
| - | Write-Host "Token d' | + | |
| - | + | ||
| - | + | ||
| - | ############################################################ | + | |
| - | # ÉTAPE 2 – RÉCUPÉRER LE SITE SHAREPOINT PAR SON URL | + | |
| - | ############################################################ | + | |
| - | + | ||
| - | Write-Host " | + | |
| - | + | ||
| - | $site = Invoke-RestMethod ` | + | |
| - | -Method GET ` | + | |
| - | -Uri " | + | |
| - | -Headers $Headers | + | |
| - | + | ||
| - | $SiteId | + | |
| - | + | ||
| - | Write-Host "Site trouvé : $($site.displayName)" | + | |
| - | Write-Host " | + | |
| - | + | ||
| - | ############################################################ | + | |
| - | # ÉTAPE 3 – ATTRIBUER LA PERMISSION WRITE | + | |
| - | ############################################################ | + | |
| - | + | ||
| - | Write-Host " | + | |
| - | + | ||
| - | $permissionBody = @{ | + | |
| - | roles = @(" | + | |
| - | grantedToIdentities = @( | + | |
| - | @{ | + | |
| - | application = @{ | + | |
| - | id = $AppId | + | |
| - | } | + | |
| - | } | + | |
| - | ) | + | |
| - | } | ConvertTo-Json -Depth 5 | + | |
| - | + | ||
| - | Invoke-RestMethod ` | + | |
| - | -Method POST ` | + | |
| - | -Uri " | + | |
| - | -Headers $Headers ` | + | |
| - | -Body $permissionBody ` | + | |
| - | -ContentType " | + | |
| - | + | ||
| - | Write-Host " | + | |
| - | + | ||
| - | ############################################################ | + | |
| - | # ÉTAPE 4 – TEST : CRÉATION D’UN DOSSIER DANS SHAREPOINT | + | |
| - | ############################################################ | + | |
| - | + | ||
| - | Write-Host "Test : création d’un dossier SharePoint..." | + | |
| - | + | ||
| - | $folderBody = @{ | + | |
| - | name = $NewFolderName | + | |
| - | folder = @{} | + | |
| - | } | ConvertTo-Json | + | |
| - | + | ||
| - | Invoke-RestMethod ` | + | |
| - | -Method POST ` | + | |
| - | -Uri " | + | |
| - | -Headers $Headers ` | + | |
| - | -Body $folderBody ` | + | |
| - | -ContentType " | + | |
| - | + | ||
| - | Write-Host " | + | |
| + | => Affiche un DriveId | ||
| + | Type : documentLibrary | ||
| </ | </ | ||
| - | * Donner accès à l' | + | * Créer un dossier À LA RACINE (test simple). |
| < | < | ||
| - | Grant-MgSitePermission | + | New-MgDriveRootChild ` |
| + | | ||
| + | | ||
| + | | ||
| + | " | ||
| + | " | ||
| + | | ||
| - | Grant-MgSitePermission ` | ||
| - | -SiteId $site.Id ` | ||
| - | -Roles " | ||
| - | -GrantedToIdentities @{ application = @{ id = " | ||
| + | => Résultat attendu | ||
| + | Id : 01ABCDEF.... | ||
| + | Name : Test-Dossier | ||
| + | => Dossier créé avec succès à vérifier dans SharePoint | ||
| </ | </ | ||
| - | * Tester l’accès avec Microsoft Graph (avec client secret) | + | * lister les dossier à la racine |
| - | Variables requises | ||
| < | < | ||
| - | $tenantId | + | $items = Get-MgDriveRootChild -DriveId |
| - | $clientId | + | |
| - | $clientSecret = "< | + | |
| - | $siteId | + | |
| </ | </ | ||
| - | * Obtenir un token avec l’application | + | * Récupérer le dossier General |
| < | < | ||
| - | $tokenBody | + | $parent |
| - | client_id | + | $parent.Id |
| - | scope = " | + | </ |
| - | | + | |
| - | | + | |
| - | } | + | |
| - | * | + | * création du sous-dossier |
| < | < | ||
| - | $headers = @{ Authorization = " | + | New-MgDriveItemChild ` |
| - | $body = ' | + | -DriveId |
| - | + | -DriveItemId $parent.Id ` | |
| - | Invoke-RestMethod ` | + | -AdditionalProperties |
| - | -Uri "https:// | + | " |
| - | -Headers $headers ` | + | |
| - | -Method POST ` | + | "@microsoft.graph.conflictBehavior" |
| - | -Body $body ` | + | } |
| - | -ContentType | + | |
| </ | </ | ||
| - | |||
| ==== Installer le module module PnP.PowerShell ==== | ==== Installer le module module PnP.PowerShell ==== | ||
| PnP.PowerShell supporte : | PnP.PowerShell supporte : | ||
reseau/cloud/azure/configurerapppoursharepoint.1775419739.txt.gz · Dernière modification : 2026/04/05 22:08 de techer.charles_educ-valadon-limoges.fr
