Skip to main content

Autenticazione CCT e autenticazione Digital

Perseguendo un processo evolutivo della piattaforma di conservazione finalizzato ad aumentare la fruibilità e la sicurezza il meccanismo di autenticazione della piattaforma CCT è dichiarato obsoleto e in fase di sostituzione con il nuovo sistema di autenticazione di Teamsystem.

La dismissione del vecchio sistema viene effettuata attraverso la migrazione delle posizioni attive dal sistema legacy al nuovo sistema di autenticazione e autorizzazione integrato nel portale 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 procedura standard per il rilascio di una coppia che chiameremo "Key And Secret" e che consentirà la fruizione dei servizi WCF.

Key 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 sostituizione delle credenziali da utilizzare, inserendo la key 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 key 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 deleganto 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 ala 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

Si consiglia caldamente di applicare una delle tecniche precedentemente esposte. In ogni caso è 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 Digitla, 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;
}