Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Lorsque vous utilisez SharePoint Online, vous pouvez définir des applications dans l’ID Entra et ces applications peuvent recevoir des autorisations pour SharePoint, mais également pour tous les autres services dans Microsoft 365. Ce modèle est le modèle préféré dans le cas où vous utilisez SharePoint Online. Si vous utilisez SharePoint en local, vous devez utiliser le modèle SharePoint uniquement via basé Azure ACS, comme décrit ici.
Configuration d’une application Entra ID pour l’accès à l’application uniquement
Dans Id Entra lorsque vous effectuez une application uniquement, vous devez utiliser un certificat pour demander l’accès aux API CSOM/REST SharePoint : toute personne disposant du certificat et de sa clé privée peut utiliser l’application et les autorisations accordées à l’application. Les étapes ci-dessous vous guident tout au long de la configuration de ce modèle.
Création d’une application Entra à l’aide du portail Entra
Si vous souhaitez créer manuellement l’application Entra, suivez les étapes ci-dessous pour créer et configurer votre application Entra :
- Accédez au portail Entra, puis cliquez sur Applications, puis inscriptions d'applications dans le volet de navigation gauche.
- Cliquez sur nouvelle page d’inscription .
- Fournissez un nom pour votre application Entra (par exemple, Microsoft365AssessmentToolForWorkflow)
- Sélectionnez Client public/natif (bureau mobile &) et entrez http://localhost comme URI de redirection.
- Cliquez sur Inscrire et l’application Entra est créée et ouverte.
- Vérifiez que vous avez défini les autorisations d’application nécessaires via le lien Autorisations d’API dans le volet de navigation gauche
- Accédez à Certificats & secrets, cliquez sur Certificats et Charger le certificat, sélectionnez le fichier .cer de votre certificat et ajoutez-le.
- Cliquez sur Accorder le consentement de l’administrateur pour... pour donner son consentement aux autorisations ajoutées.
Remarque
- Si vous n’avez pas de certificat disponible, vous pouvez utiliser Windows PowerShell pour en créer un : https://docs.microsoft.com/azure/active-directory/develop/howto-create-self-signed-certificate.
- Pour en savoir plus sur la création d’une application Entra, consultez la documentation Entra.
Création d’une application Entra à l’aide de PnP PowerShell
L’utilisation de PnP PowerShell pour créer une application Entra devient vraiment simple. L’applet de commande Register-PnPAzureADApp crée une application Entra, crée un certificat auto-signé à l’intérieur du nœud Personnel (= My) du magasin de certificats CurrentUser , puis raccorde ce certificat à l’application Entra créée. Enfin, les autorisations appropriées sont configurées et vous êtes invité à donner votre consentement.
Importante
Si vous rencontrez des erreurs au cours des étapes ci-dessous, il est probable que vous ne disposiez pas des autorisations nécessaires. Pour obtenir de l’aide, contactez les administrateurs de votre locataire/Entra.
# Before you use this!!
# - Remove/update the application/delegated permissions depending on your needs
# - Also update the Tenant and Username properties to match your environment.
#
# If you prefer to have a password set to secure the created PFX file then add below parameter
# -CertificatePassword (ConvertTo-SecureString -String "password" -AsPlainText -Force)
#
# See https://pnp.github.io/powershell/cmdlets/Register-PnPAzureADApp.html for more options
#
Register-PnPAzureADApp -ApplicationName Microsoft365AssessmentToolForAlerts `
-Tenant contoso.onmicrosoft.com `
-Store CurrentUser `
-GraphApplicationPermissions "Sites.Read.All" `
-SharePointApplicationPermissions "Sites.FullControl.All" `
-GraphDelegatePermissions "Sites.Read.All", "User.Read" `
-SharePointDelegatePermissions "AllSites.FullControl" `
-Username "joe@contoso.onmicrosoft.com" `
-Interactive
Remarque
Remplacez par contoso.onmicrosoft.com le nom de votre locataire Entra et veillez à remplacer par joe@contoso.onmicrosoft.com l’ID d’utilisateur qui est un administrateur Entra (ou un administrateur général). Si vous ne savez pas quel est le nom de votre locataire Entra, accédez à https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView et case activée pour la valeur de Domaine principal.
Une fois que vous avez appuyé sur entrée sur la commande ci-dessus, vous êtes invité à vous connecter et vous devez vous connecter à l’aide de l’utilisateur que vous avez spécifié pour le Username paramètre . Après cela, l’application Entra est créée et configurée, suivie d’une attente de 60 secondes pour s’assurer que la création a été propagée sur tous les systèmes. La dernière étape est le flux de consentement administrateur : vous serez à nouveau invité à vous connecter avec l’utilisateur administrateur spécifié, suivi d’une boîte de dialogue de consentement affichant les autorisations accordées à l’application. Appuyez sur Accepter pour finaliser le flux de consentement. Dans la sortie obtenue, vous obtenez des informations clés :
Pfx file : D:\assessment\Microsoft365AssessmentTool.pfx
Cer file : D:\assessment\Microsoft365AssessmentTool.cer
AzureAppId/ClientId : 95610f5d-729a-4cd1-9ad7-1fa9052e50dd
Certificate Thumbprint : 165CCE93E08FD3CD85B7B25D5E91C05B1D1E49FE
L’exécution du Register-PnPAzureADApp n’a pas seulement créé et configuré l’application Entra, elle a également créé un certificat pour le flux d’autorisation de l’application. Ce certificat a été ajouté au magasin de certificats de l’utilisateur actuel, sous le nœud personnel. Vous pouvez utiliser certmgr sur la ligne de commande pour ouvrir le magasin de certificats de l’utilisateur local.
Remarque
Le certificat est également exporté en tant que fichier PFX et fichier cer sur le système de fichiers. N’hésitez pas à supprimer ces fichiers exportés, car il est plus facile d’utiliser le certificat à partir du magasin de certificats.
Utilisation de ce principal avec PnP PowerShell
Si vous souhaitez utiliser ce principal d’application Id Entra uniquement avec PnP PowerShell, une fois que vous avez installé le module PowerShell PnP, vous pouvez vous connecter à votre environnement SharePoint Online à l’aide de l’authentification non interactive prise en charge par PnP PowerShell.
Connect-PnPOnline [yourtenant].sharepoint.com -ClientId <client id of your Entra ID Application Registration> -Tenant <tenant>.onmicrosoft.com -CertificatePath <path to your .pfx certificate>
# or
Connect-PnPOnline [yourtenant].sharepoint.com -ClientId <client id of your Entra ID Application Registration> -Tenant <tenant>.onmicrosoft.com -Thumbprint <thumbprint that can be found in the certificate>
Vous pouvez maintenant effectuer des opérations via PnP PowerShell sur votre environnement SharePoint Online à l’aide de ce certificat Approbation d’application uniquement.
Remarque
PnP PowerShell est une solution open source pour laquelle un support est assuré par la communauté active. Il n’existe pas de contrat SLA Microsoft pour le support technique relatif à cet outil open source.
Utilisation de ce principal dans votre application CSOM
Procédez comme suit pour créer une application console C# qui utilise CSOM et s’authentifie à l’aide de l’ID Entra avec des permis d’application :
- Créer une solution basée sur la console pour c# .net
- Installez le package NuGet MSAL.NET en exécutant la commande suivante dans la console du Gestionnaire de package :
Install-Package Microsoft.Identity.Client - Ajoutez le code suivant à votre application pour configurer MSAL et acquérir un jeton d’accès à l’aide d’un certificat
using System;
using System.Threading.Tasks;
using Microsoft.SharePoint.Client;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Identity.Client;
namespace YourNamespace
{
class Program
{
static async Task Main(string[] args)
{
//Generate Access Token using MSAL
#region Access Token
string tenantId = "{Tenant_Id}";
string clientId = "{Client_Id}";
string certificatePath = @"{Full Path to the certificate .Pfx file}";
string certificatePassword = "{Password of the .Pfx file}";
var siteUrl = new Uri("{SPO Site URL}");
X509Certificate2 certificate = new X509Certificate2(certificatePath, certificatePassword);
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithCertificate(certificate)
.WithAuthority(new Uri($"https://login.microsoftonline.com/{tenantId}"))
.Build();
string[] scopes = new string[] { "https://domain.sharepoint.com/.default" };
AuthenticationResult result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
var accessToken = result.AccessToken;
Console.WriteLine($"Access Token: {accessToken}");
Console.WriteLine();
Console.WriteLine();
#endregion
//Generate SPO Context using the Access token
#region SPO Context
using (var context = new ClientContext(siteUrl))
{
context.ExecutingWebRequest += async (sender, e) =>
{
// Insert the access token in the request
e.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer " + accessToken;
};
// Read web properties
var web = context.Web;
context.Load(web, w => w.Id, w => w.Title);
await context.ExecuteQueryAsync();
Console.WriteLine($"{web.Id} - {web.Title}");
Console.ReadKey();
}
#endregion
}
}
}
Utilisation de ce principal dans votre application CSOM à l’aide de la bibliothèque SharePoint PnP Framework
Dans une première étape, vous ajoutez le package NuGet de la bibliothèque PnP Framework : https://www.nuget.org/packages/PnP.Framework.
Une fois cette opération effectuée, vous pouvez utiliser la construction de code ci-dessous :
using PnP.Framework;
using System;
namespace AzureADCertAuth
{
class Program
{
static void Main(string[] args)
{
var authManager = new AuthenticationManager("<application id>", "c:\\temp\\mycert.pfx", "<password>", "contoso.onmicrosoft.com");
using (var cc = authManager.GetContext("https://contoso.sharepoint.com/sites/demo"))
{
cc.Load(cc.Web, p => p.Title);
cc.ExecuteQuery();
Console.WriteLine(cc.Web.Title);
};
}
}
}
Remarque
PnP Framework est une solution open source avec une communauté active qui la prend en charge. Il n’existe pas de contrat SLA Microsoft pour le support technique relatif à cet outil open source.
Utilisation de ce principal dans vos scripts PowerShell sans dépendre de PnP PowerShell
Via un fichier PFX et un mot de passe
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
Add-Type -Path "<Full Path to the Microsoft.Identity.Client.dll file>"
Add-Type -Path "<Full Path to the Microsoft.IdentityModel.Abstractions.dll file>"
#Declare the Variables
$tenantId = "<Tenant_Id>"
$clientId = "<Client_Id>"
$certPath = "<Full Path to the PFX file>"
$certPassword = "<Password of the .pfx certificate>"
$siteUrl = "https://<Domain>.sharepoint.com/sites/<SiteName>"
# Load the certificate
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($certPath, $certPassword, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
# Get the access token using MSAL
$authority = "https://login.microsoftonline.com/$tenantId"
$scope = New-Object System.Collections.Generic.List[string]
$scope.Add("https://<Domain>.sharepoint.com/.default")
$msalApp = [Microsoft.Identity.Client.ConfidentialClientApplicationBuilder]::Create($clientId).WithAuthority($authority).WithCertificate($cert).Build()
$authResult = $msalApp.AcquireTokenForClient($scope).ExecuteAsync().Result
$accessToken = $authResult.AccessToken
$context = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
# Attach event handler for Authorization header
$context.add_ExecutingWebRequest({
param($sender, $e)
$e.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer $accessToken"
})
# Example: Load Web Title
$web = $context.Web
$context.Load($web)
$context.ExecuteQuery()
Write-Host "Site Title:" $web.Title -ForegroundColor Green
Via une empreinte numérique pour charger le certificat à partir du magasin de certificats de l’utilisateur
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
Add-Type -Path "<Full Path to the Microsoft.Identity.Client.dll file>"
Add-Type -Path "<Full Path to the Microsoft.IdentityModel.Abstractions.dll file>"
$tenantId = "<Tenant_Id>"
$clientId = "<Client_Id>"
$thumbprint = "<Thumbprint value>"
$siteUrl = "https://<Domain>.sharepoint.com/sites/<SiteName>"
# Load the certificate from the CurrentUser\My store
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("My", "CurrentUser")
$store.Open("ReadOnly")
$cert = $store.Certificates | Where-Object { $_.Thumbprint -eq $thumbprint }
$store.Close()
if (-not $cert) {
Write-Error "Certificate with thumbprint $thumbprint not found."
return
}
# Get the access token using MSAL
$authority = "https://login.microsoftonline.com/$tenantId"
$scope = New-Object System.Collections.Generic.List[string]
$scope.Add("https://<Domain>.sharepoint.com/.default")
$msalApp = [Microsoft.Identity.Client.ConfidentialClientApplicationBuilder]::Create($clientId).WithAuthority($authority).WithCertificate($cert).Build()
$authResult = $msalApp.AcquireTokenForClient($scope).ExecuteAsync().Result
$accessToken = $authResult.AccessToken
# Output the token
$context = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
# Attach event handler for Authorization header
$context.add_ExecutingWebRequest({
param($sender, $e)
$e.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer $accessToken"
})
# Example: Load Web Title
$web = $context.Web
$context.Load($web)
$context.ExecuteQuery()
Write-Host "Site Title:" $web.Title -ForegroundColor Green
FAQ
Puis-je utiliser d’autres moyens que les certificats pour obtenir un accès d’application uniquement pour mon application Azure AD ?
Non, toutes les autres options sont bloquées par SharePoint Online et entraînent un message Accès refusé.