Dopo 1 anno che si è creato un Add-In Permisson di SharePoint, il relativo secret scade e va rinnovato.
L'errore che compare quando si tenta di fare una login è questo:
{"error":"invalid_client","error_description":"AADSTS7000222: The provided client secret keys are
expired. Visit the Azure Portal to create new keys for your app, or consider using certificate credentials for added
security: https://docs.microsoft.com/azure/act...als\r\nTrace ID:
a171d92b-6b8a-44f9-8655-b4c316691e00\r\nCorrelation ID: e61dcdde-2a48-3dac-7d16-a3df12120882\r\nTimestamp: 2021-12-22
21:31:33Z","error_codes":[7000222],"timestamp":"2021-12-22 21:31:33Z","trace_id":"a171d91a-6b7a-44f9-8611-b4c316691e00","corre
lation_id":"e61dccce-1a48-4dcc-9d06-13df12b20882","error_uri":"https://accounts.accesscontrol.windo...code=7000222 "}

Connessione a SharePoint

Per risolverlo bisogna prima di tutto collegarsi a SharePoint con il comando PowerShell Connect-MsolService

PowerShell

# gli install solo la prima volta
# Install-Module MSOnline 
# Install-Module -Name AzureAD

Import-Module MSOnline
$msolCred = Get-Credential
Connect-MsolService -credential $msolCred 

Visualizzare le scadenze

E' possibile visualizzare le scadenze dei secret tramite questo PowerShell che elenca tutte le credenziali di tipo password (=secret) registrati in SharePoint con la relativa data di creazione e scadenza

PowerShell

$applist = Get-MsolServicePrincipal -all  |Where-Object -FilterScript { ($_.DisplayName -notlike "*Microsoft*") -and ($_.DisplayName -notlike "autohost*") -and  ($_.ServicePrincipalNames -notlike "*localhost*") }
$m = $applist.count
$i=0
foreach ($appentry in $applist) {
    $i++;
    $principalId = $appentry.AppPrincipalId
    $principalName = $appentry.DisplayName
    
    Write-host "$i/$m) $principalName;$principalId;"

    Get-MsolServicePrincipalCredential -AppPrincipalId $principalId -ReturnKeyValues $false | Where-Object { $_.Type -eq "Password" } | ForEach-Object { "$principalName;$principalId;" + $_.KeyId.ToString() +";" + $_.StartDate.ToString() + ";" + $_.EndDate.ToString() } | out-file -FilePath $pwd\sgart-secret-date.txt -append
}
viene creato un file sgart-secret-date.txt nella cartella corrente con il risultato della query.

Impostare un nuovo secret

Per generare e impostare il nuovo secret si può usare questo PowerShell

PowerShell

$clientId = "<inserisci il client id>"

$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(2)

# aggiorna il secret su SharePoint
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

# visualizza il nuovo secret
$newClientSecret
che al termine visualizza il secret generato.
Copiare subito il secret in quanto, successivamente, non è più possibile recuperarne il valore.

Aggiornare il progetto

Ricordarsi di aggiornare il progetto Visual Studio con il nuovo secret e pubblicare.

Per maggiori informazioni sull'argomento vedi anche Replace an expiring client secret in a SharePoint Add-in
Tags:
C#236 PowerShell200 SharePoint498 SharePoint 201668 SharePoint 201918 SharePoint Online75
Potrebbe interessarti anche: