Octroi de l’accès à l’aide de SharePoint App-Only

SharePoint App-Only est le modèle plus ancien, mais toujours très pertinent, de configuration des principaux d’application. Ce modèle fonctionne pour SharePoint Online et SharePoint local (2013/2016/2019/édition d’abonnement) et est idéal pour préparer vos applications à la migration de SharePoint local vers SharePoint Online. Les étapes ci-dessous montrent comment configurer un principal d’application avec des autorisations de contrôle total du locataire, mais vous pouvez également accorder des autorisations de lecture uniquement à l’aide de cette approche.

Importante

L’utilisation d’Azure ACS (Access Control Services) pour SharePoint Online a été mise hors service depuis le 27 novembre 2023, consultez l’annonce de mise hors service complète pour en savoir plus. L’utilisation d’Azure ACS en dehors du contexte de SharePoint a déjà été mise hors service le 7 novembre 2018 et est maintenant en fin de vie.

La mise hors service signifie que la fonctionnalité ne recevra aucun nouvel investissement, mais qu’elle est toujours prise en charge. La fin de vie signifie que la fonctionnalité sera abandonnée et qu’elle n’est plus disponible.

Pour les nouveaux locataires, les applications qui utilisent un jeton d’accès uniquement aux applications ACS sont désactivées par défaut. Nous vous recommandons d’utiliser le modèle d’application uniquement Azure AD, qui est moderne et plus sécurisé. Toutefois, vous pouvez modifier le comportement en exécutant « set-spotenant -DisableCustomAppAuthentication $false » (nécessite la dernière version de PowerShell d’administration SharePoint).

Configuration d’un principal d’application uniquement avec des autorisations de locataire

Remarque

L’administrateur de collection de sites n’est pas en mesure d’inscrire le complément auprès d’Azure ACS dans AppRegNew.aspx par défaut, sauf autorisation explicite de l’administrateur du locataire SharePoint. Pour plus d’informations, consultez Set-SPOTenant.

Accédez à un site dans votre locataire (par exemple https://contoso.sharepoint.com), puis appelez la page appregnew.aspx (par exemple https://contoso.sharepoint.com/_layouts/15/appregnew.aspx). Dans cette page, cliquez sur le bouton Générer pour générer un ID client et une clé secrète client, puis renseignez les informations restantes, comme indiqué dans la capture d’écran ci-dessous.

Créer un id client & secret

Importante

Stockez les informations récupérées (ID client et clé secrète client), car vous en aurez besoin à l’étape suivante !

L’étape suivante consiste à accorder des autorisations au principal nouvellement créé. Étant donné que nous accordons des autorisations étendues au locataire, cette octroi ne peut être effectué que via la page appinv.aspx du site d’administration du locataire. Vous pouvez accéder à ce site via https://contoso-admin.sharepoint.com/_layouts/15/appinv.aspx. Une fois la page chargée, ajoutez votre ID client et recherchez le principal créé :

Accorder des autorisations au nouveau principal

Pour accorder des autorisations, vous devez fournir le code XML d’autorisation qui décrit les autorisations nécessaires. Étant donné que cette application doit pouvoir accéder à tous les sites + utilise également la recherche avec l’application uniquement, elle a besoin des autorisations ci-dessous :

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
</AppPermissionRequests>

Lorsque vous cliquez sur Créer, une boîte de dialogue de consentement d’autorisation s’affiche. Appuyez sur Approuver pour accorder les autorisations :

using appregnew.aspx

Importante

Protégez la combinaison id client/secret créée, comme il s’agirait de votre compte d’administrateur. À l’aide de cet ID client/secret, vous pouvez lire/mettre à jour toutes les données de votre environnement SharePoint Online .

Une fois le travail de préparation terminé, nous allons passer au chapitre suivant montrant comment utiliser le principal d’application créé via sa combinaison d’ID client et de secret.

Utilisation de ce principal avec PnP PowerShell

Si vous souhaitez utiliser l’inscription d’application uniquement générée avec PnP PowerShell, vous pouvez le faire en vous connectant à votre environnement SharePoint local ou en ligne à l’aide de :

Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/demo -ClientId [Your Client ID] -ClientSecret "[Your Client Secret]"

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 à l’aide de la bibliothèque 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 :

string siteUrl = "https://contoso.sharepoint.com/sites/demo";
using (var cc = new AuthenticationManager().GetACSAppOnlyContext(siteUrl, "[Your Client ID]", "[Your Client Secret]"))
{
    cc.Load(cc.Web, p => p.Title);
    cc.ExecuteQuery();
    Console.WriteLine(cc.Web.Title);
};

Utilisation de ce principal dans votre application sans utiliser la bibliothèque PnP Framework

Une fois le principal créé et accepté, vous pouvez utiliser l’ID et le secret du principal pour demander un accès. La classe TokenHelper.cs utilise l’ID et le secret du fichier de configuration de l’application.

using Microsoft.SharePoint.Client;
using System;

namespace AzureACSAuth
{
    class Program
    {
        static void Main(string[] args)
        {
            string siteUrl = "https://contoso.sharepoint.com/sites/demo";

            //Get the realm for the URL
            string realm = TokenHelper.GetRealmFromTargetUrl(new Uri(siteUrl));

            //Get the access token for the URL.  
            string accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, new Uri(siteUrl).Authority, realm).AccessToken;

            //Create a client context object based on the retrieved access token
            using (ClientContext cc = TokenHelper.GetClientContextWithAccessToken(siteUrl, accessToken))
            {
                cc.Load(cc.Web, p => p.Title);
                cc.ExecuteQuery();
                Console.WriteLine(cc.Web.Title);
            }
        }
    }
}

Voici un exemple de app.config :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- Use AppRegNew.aspx and AppInv.aspx to register client id with secret -->
    <add key="ClientId" value="[Your Client ID]" />
    <add key="ClientSecret" value="[Your Client Secret]" />
  </appSettings>
</configuration>

Remarque

Vous pouvez facilement insérer la classe TokenHelper.cs dans votre projet en ajoutant le package nuget AppForSharePointOnlineWebToolkit à votre solution.