Partager via


Remplacement d’une clé secrète client arrivant à expiration dans un complément pour SharePoint

Les clés secrètes client pour les compléments SharePoint, enregistrées à l’aide de la page AppRegNew.aspx, expirent au bout d’un an. Cet article explique comment ajouter une nouvelle clé secrète pour le complément et créer une clé secrète client valable pour une durée de trois ans.

Remarque

Cet article concerne les compléments SharePoint distribués via un catalogue de l’organisation et enregistrés avec la page AppRegNew.aspx. Si le complément est enregistré dans le service Mon tableau de bord vendeur, consultez la section Création ou mise à jour d’ID et de clés secrètes client dans le service Mon tableau de bord vendeur.

Nous vous recommandons de mettre à jour vos clés secrets au moins 30 jours avant leur expiration. Cela vous donne un mois avant l’expiration des anciennes informations d’identification.

Nous recommandons de ne supprimer les clés secrètes qu'au minimum 7 jours après leur expiration, à condition que vous les ayez supprimés de la configuration de l'application.

La suppression d’une clé secrète expirée d’ACS avant de la supprimer de la configuration de l’application provoquera des erreurs.

Conditions préalables

Vérifiez les points suivants avant de commencer :

  • L’Assistant de connexion Microsoft Online Services doit être installé sur l’ordinateur de développement.
  • Vous pouvez vous connecter à Office 365 avec PowerShell : Se connecter à Office 365 PowerShell
  • Vous êtes administrateur client du client Office 365 (ou administrateur de batterie de serveurs sur la batterie de serveurs) où le complément a été enregistré avec la page AppRegNew.aspx.

Recherche des dates d'expiration des Compléments SharePoint installés sur l'architecture Office 365

  1. Ouvrez Windows PowerShell et exécutez la cmdlet suivante :

    Connect-MsolService
    
  2. À l’invite de connexion, entrez les identifiants de l’administrateur client (ou de l’administrateur de la batterie de serveurs) pour l’architecture ou la batterie de serveurs Office 365, où le complément a été enregistré avec AppRegNew.aspx.

  3. Générez un rapport répertoriant tous les compléments, ainsi que la date d'expiration de leur clé secrète, en saisissant les lignes de code suivantes. Tenez compte des informations suivantes :

    • Le code filtre d’abord les applications Microsoft, les compléments en cours de développement (et un type de complément, aujourd’hui obsolète, dit « auto-hébergé »).
    • Ensuite, il filtre les compléments autres que SharePoint et les compléments qui utilisent des clés asymétriques, telles que des flux de travail.
    $applist = Get-MsolServicePrincipal -all  |Where-Object -FilterScript { ($_.DisplayName -notlike "*Microsoft*") -and ($_.DisplayName -notlike "autohost*") -and  ($_.ServicePrincipalNames -notlike "*localhost*") }
    
    foreach ($appentry in $applist) {
        $principalId = $appentry.AppPrincipalId
    
        Get-MsolServicePrincipalCredential -AppPrincipalId $principalId -ReturnKeyValues $false | Where-Object { $_.Type -eq "Password" } | ForEach-Object {
            [PSCustomObject][Ordered]@{
                PrincipalName = $appentry.DisplayName
                PrincipalId = $principalId
                KeyID = $_.KeyId
                StartDate = $_.StartDate
                EndDate = $_.EndDate
            } | Export-Csv -Path C:\temp\appsec.csv -NoTypeInformation -Delimiter ';' -Append
        }
    }
    
  4. Ouvrez le fichier C:\temp\appsec.csv pour afficher le rapport. Laissez la fenêtre Windows PowerShell ouverte pour que la procédure suivante, si l’un des clés secrètes est proche de l’expiration.

Génération d’une nouvelle clé secrète

  1. Créez une variable de l'ID client à l'aide du code suivant, en utilisant l'ID client du Complément SharePoint comme paramètre.

    $clientId = 'client id of the add-in'
    
  2. Générez une nouvelle clé secrète client en saisissant le code suivant :

    $bytes = New-Object Byte[] 32
    $rand = [System.Security.Cryptography.RandomNumberGenerator]::Create()
    $rand.GetBytes($bytes)
    $rand.Dispose()
    $newClientSecret = [System.Convert]::ToBase64String($bytes)
    $dtStart = [System.DateTime]::Now
    $dtEnd = $dtStart.AddYears(1)
    New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Sign -Value $newClientSecret -StartDate $dtStart -EndDate $dtEnd
    New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Verify -Value $newClientSecret -StartDate $dtStart -EndDate $dtEnd
    New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Password -Usage Verify -Value $newClientSecret -StartDate $dtStart -EndDate $dtEnd
    $newClientSecret
    
  3. La nouvelle clé secrète client s’affiche dans la console Windows PowerShell. Copiez-la dans un fichier texte. Vous en aurez besoin pour la suite.

    Conseil

    Par défaut, la clé secrète du complément est valable pour une durée d’un an. Vous pouvez définir ce paramètre sur une valeur plus courte ou plus longue à l’aide du paramètre -EndDate sur les trois appels de la commande New-MsolServicePrincipalCredential.

Mise à jour de l’application web distante dans Visual Studio pour utiliser la nouvelle clé secrète

Importante

Si votre complément a été créé à partir d’une version précommerciale des outils de développement Microsoft Office pour Visual Studio, il peut contenir une version obsolète du fichier TokenHelper.cs (ou .vb). Si le fichier ne contient pas la chaîne « secondaryClientSecret », il est obsolète et doit être remplacé pour que vous puissiez mettre à jour l’application web à l’aide d’une nouvelle clé secrète. Pour obtenir une copie de la version finale du fichier, Visual Studio 2012 ou version ultérieure doit être installé. Créez un projet de complément SharePoint dans Visual Studio. Copiez le fichier TokenHelper dans le projet d'application web de votre Complément SharePoint.

  1. Ouvrez le projet du Complément SharePoint dans Visual Studio, puis le fichier web.config du projet d'application web. La section appSettings contient les clés pour l'ID client et la clé secrète client. Voici un exemple :

    <appSettings>
      <add key="ClientId" value="your client id here" />
      <add key="ClientSecret" value="your old secret here" />
        ... other settings may be here ...
    </appSettings>
    
  2. Remplacez le nom de la clé ClientSecret par SecondaryClientSecret, comme dans l’exemple suivant :

    <add key="SecondaryClientSecret" value="your old secret here" />
    

    Remarque

    Si vous effectuez cette procédure pour la première fois, il n’y a pas d’entrée de propriété SecondaryClientSecret à ce stade dans le fichier de configuration. Cependant, si vous effectuez la procédure pour une expiration de la clé secrète client suivante (la deuxième ou la troisième), la propriété SecondaryClientSecret est déjà présente et contient la clé secrète client initiale ou l’ancienne clé secrète expirée. Dans ce cas, supprimez d’abord la propriété SecondaryClientSecret avant de renommer ClientSecret.

  3. Ajoutez une nouvelle clé ClientSecret et attribuez-lui votre nouvelle clé secrète client. La syntaxe de la clé doit ressembler à ceci :

    <appSettings>
      <add key="ClientId" value="your client id here" />
      <add key="ClientSecret" value="your new secret here" />
      <add key="SecondaryClientSecret" value="your old secret here" />
        ... other settings may be here ...
    </appSettings>
    

    Importante

    Vous ne pourrez pas utiliser la clé secrète client qui vient d’être générée tant que la clé secrète client actuelle n’a pas expiré. Par conséquent, modifier la clé ClientId en nouvelle clé secrète client sans la présence de la clé SecondaryClientSecret ne fonctionnera pas. Vous devez suivre la procédure décrite dans cet article et attendre l’expiration de la clé secrète client précédente. Vous pouvez alors supprimer la clé SecondaryClientSecret si vous le souhaitez.

  4. Si vous avez créé un nouveau fichier TokenHelper, régénérez le projet.

  5. Republiez l’application web.

Création d’une clé secrète client pour trois ans

En cas d’expiration de clés secrètes client, vous devez d’abord supprimer toutes les clés secrètes expirées pour un élément clientId donné. Ensuite, créez un autre ID client avec MSO PowerShell, puis patientez au moins 24 heures avant de tester l’application avec le nouvel élément clientId et la nouvelle clé ClientSecret.

  1. Connectez-vous à MSOnline en tant qu’administrateur client en utilisant la marque de révision suivante obtenue via Windows PowerShell pour SharePoint.

    import-module MSOnline
    $msolcred = get-credential
    connect-msolservice -credential $msolcred
    
  2. Obtenez la chaîne ServicePrincipals et les clés correspondantes. L’impression de la chaîne $keys renvoie trois enregistrements. Vous verrez également la chaîne EndDate de chaque clé. Vérifiez que votre clé expirée apparaît ici.

    Remarque

    L’élément clientId doit correspondre à l’élément clientId expiré. Il est recommandé de supprimer toutes les clés, expirées et non expirées, pour cet élément clientId.

    $clientId = "27c5b286-62a6-45c7-beda-abbaea6eecf2"
    $keys = Get-MsolServicePrincipalCredential -AppPrincipalId $clientId
    $keys
    
  3. Retirez toutes les clés une fois que vous avez confirmé qu'elles sont effectivement expirées.

    Remove-MsolServicePrincipalCredential -KeyIds $keys.KeyId -AppPrincipalId $clientId
    
  4. Générez une nouvelle clé ClientSecret pour cet élément clientID. Elle utilise l’élément clientId défini à l’étape précédente. La nouvelle clé ClientSecret est valable pour une durée de trois ans.

    $bytes = New-Object Byte[] 32
    $rand = [System.Security.Cryptography.RandomNumberGenerator]::Create()
    $rand.GetBytes($bytes)
    $rand.Dispose()
    $newClientSecret = [System.Convert]::ToBase64String($bytes)
    $dtStart = [System.DateTime]::Now
    $dtEnd = $dtStart.AddYears(3)
    New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Sign -Value $newClientSecret -StartDate $dtStart  -EndDate $dtEnd
    New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Symmetric -Usage Verify -Value $newClientSecret   -StartDate $dtStart  -EndDate $dtEnd
    New-MsolServicePrincipalCredential -AppPrincipalId $clientId -Type Password -Usage Verify -Value $newClientSecret   -StartDate $dtStart  -EndDate $dtEnd
    $newClientSecret
    
  5. Copiez la nouvelle clé $newClientSecret.

  6. Remplacez l'élément Web.config par l'élément ClientId et la clé ClientSecret. Vous n'avez pas besoin de paramètres d'application pour la chaîne SecondaryClientSecret.

  7. Attendez au moins 24 heures avant de propager la clé ClientSecret à SharePoint Office (SPO).

Voir aussi