WCF - Autenticazione CCT e autenticazione Digital
Documentazione in fase di definizione.
Il Servizio di Conservazione è sottoposto ad un processo evolutivo finalizzato ad aumentarne la fruibilità e la sicurezza; in questa direzione, il meccanismo di autenticazione della piattaforma CCT è in fase di sostituzione con il nuovo sistema di autenticazione di Teamsystem Digital.
La dismissione del vecchio sistema avverrà gradatamente attraverso la migrazione delle posizioni attive dal sistema legacy al nuovo sistema di autenticazione e autorizzazione integrato nel portale TS Digital.
Successivamente alla migrazione di una posizione dal servizio CCT (legacy) al servizio Archive integrato nel portale Digital le credenziali rilasciate dall'ambiente CCT non potranno più essere utilizzate.
Le credenziali inserite nelle applicazioni integrate dovranno essere sostituite con credenziali applicative rilasciate dal portale Digital secondo la procedura standard per il rilascio di "Id And Secret" (https://agyo.elevio.help/it/articles/281) e che consentirà la fruizione dei servizi WCF.
Id and Secret sostituiranno rispettivamente username e password e dovranno essere inserite negli applicativi integrati per consentire la continuità operativa.
I servizi WCF consentono di effettuare l'autenticazione degli utenti attraverso due metodologie esposte dal servizio.
Entrambe i metodi WCF di seguito esposti sono ora dei wrapper verso il verso sistema di autenticazione del mondo Digital. Per le posizioni migrate effettuando una login con BasicAuthentication, DigestAutentication o direttamente verso i servizi di DigitalAuth si ottengono token equivalenti.
BasicAuthentication
Su canale sicuro In input il servizio riceve username e password e restituisce il token di autorizzazione da utilizzare nelle chiamate successive ai servizi di consultazione e inserimento documenti.
Le integrazioni effettuate su questo canale continueranno a funzionare con la semplice sostituzione delle credenziali da utilizzare, inserendo l'Id al posto dello username e il secret code al posto della password.
Nel caso in cui il software abbia implementato in passato la basic autentication non dovrà essere effettuato nessun intervento correttivo. Sostituire username e password con Id e secret code saranno sufficienti per ripristinare il funzionamento del servizio.
DigestAutentication
Nella DigestAutentication i client integrati passano al servizio 3 valori, username, un ticket, alias una stringa pseudocasuale generata dal server stesso in funzione dell'utente, e un digest che è in sostanza una stringa calcolata secondo una regola documentata e che è stata implementata nei software chiamanti
Le integrazioni effettuate che sfruttano questo canale per l'autenticazione dovranno essere soggette ad un aggiornamento software per consentire la continuità operativa. Il meccanismo di calcolo del Digest utilizzato in passato non è più compatibile con il nuovo sistema di autenticazione.
Tecniche per la revisione del software integrato per garantire la continuità del servizio
Un software che in passato ha effettuato una implementazione con il canale Digest deve essere modificato per consentire la continuità di servizio.
Si propongono 3 strategie differenti:
Passaggio a BasicAuthentication
Rimuovendo le chiamate al servizio DigestAutentication e sostituendole con l'implementazione delle chiamate verso la più semplice BasicAuthentication consentirà di ripristinare e garantire le funzionalità del servizio delegando ai servizi di Archive la implementazione delle logiche utili e necessarie alla autenticazione.
Passaggio alla autenticazione Digital
Poichè i WCF sono solo dei wrapper verso il vero sistema di autenticazione DigitalAuth per le posizioni migrate è possibile ottenere un security token corretto implementando correttamente la autenticazione verso i servizi Digital.
Si rimanda alla documentazione di autenticazione nell'ecosistema Digital per la corretta implementazione.
Il token ottenuto da Digital potrà poi essere utilizzato senza problemi come security token dei servizi di Archive.
Correzione del calcolo del Digest per l'ottenimento del token corretto da DigestAuthentication
I servizi WCF sono considerati obsoleti e un giorno dovranno essere dismessi a favore delle nuove API più efficaci e che garantiscono maggiore flessibilità in fase di versamento. Per tale motivo si consiglia di applicare una delle tecniche precedentemente esposte.
E' possibile effettuare una correzione del codice secondo le seguenti indicazioni per correggere il problema.
Il digest in passato veniva calcolato secondo la seguente implementazione:
private string GetLegacyDigest(string username, string password, ClientTicket ct)
{
// ClientTicket è stato ottenuto da una precedente chiamata al servizio GetTicket
string key = CalculateSHA1(Encoding.GetEncoding("ISO-8859-1").GetBytes(username.ToLower() + password.ToLower()));
string digest = CalculateSHA1(Encoding.GetEncoding("ISO-8859-1").GetBytes(username.ToLower() + ct.ClientIp + key + ct.Ticket));
return digest;
}
Il nuovo Digest invece deve essere calcolato secondo le regole del sistema di autenticazione Digital, ad esempio al seguente implementazione ottiene un Digest corretto:
public static string GetDigitalDigest(String username, String password, String ticket)
{
// ticket è stato estratto dalla chiamata sui WCF sul metodo GetTicket
// ma equivale al getNonce del sistema di autenticazione digital
string hash = GenerateDigitalDigest(Encoding.UTF8.GetBytes(username.ToLower() +password));
string outputDigest = GenerateDigitalDigest(Encoding.UTF8.GetBytes(hash + ticket));
return outputDigest;
}
private static string GenerateDigitalDigest(byte[] strData)
{
string hex = string.Empty;
using (var sha = System.Security.Cryptography.SHA256.Create())
{
var computedHash = sha.ComputeHash(strData);
foreach (byte x in computedHash)
{
hex += String.Format("{0:x2}", x);
}
}
return hex;
}
Ci sarà un periodo di transizione in cui alcuni clienti saranno migrati nel nuovo sistema e altri clienti saranno ancora operativi nel sistema Legacy.
Gli integratori possono sfruttare le informazioni e la tecnica descritta in questo articolo per sapere a runtime quando un cliente è stato migrato o meno.
Praticamente il software può essere predisposto affinchè possa effettuare la login sia con le credenziali legacy che sulle credenziali digital. Prima dell'ottenimento del token di dialogo con Archive può essere consultata la API dedicata e quindi scegliere se ottenere token legacy con credenziali e tecniche legacy oppure se utilizzare il token digital, già ottenuto per consultare la API.
Il flowchart potrebbe essere riassunto con il seguente schema:
nota: il token digital ottenuto all'inizio del processo può essere utilizzato anche nelle chiamate dei WCF sempre che le credenziali applicative create abbiano i permessi corretti per il versamento dei documenti su Archive
Resta inteso che nel caso in cui il configType sia DIGITAL i token LEGACY non saranno più operativi e quindi dovrà essere adeguato il sistema di autenticazione
