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# 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$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$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