feature image - https://source.unsplash.com/random/900×600/?wallpaper&sig=ac2270b9-7f8a-4b9d-8871-906354d3fb9d

Autenticazione e autorizzazione

Nei sistemi distribuiti Nei sistemi distribuite abbiamo a disposizione servizi e risorse. Entrambi questi elementiandranno protetti consentendo l’accesso solo chi ne ha effettivamente diritto. L’accesso al sistema stesso dovrei essere organizzato in modo tale chesia possibile riconoscere chi ha fatto accesso al sistema e quindi tracciarne le attività all’interno del sistema stesso.

Abbiamo quindi due problemi da risolvere:

  • associare ad una entità esterna sistema un’entità interna al sistema
  • definire per ogni entitá autenticata che cosa questa può andare a fare l’interno del sistema

Autenticazione

Il problema dell’autenticazione é tipico di tutti i sistemi informativiche consentono un accesso dall’esterno del sistema. Ogni volta che un’entità esterna, utente o un programma, cerca di accedere al sistema non potrà mai farlo in modo libero perché bisognerà inoltre riconoscere chi è che ha fatto accesso per verificare che ne abbia diritto. Le tecniche che vanno ad associare a un utente o programma esterni un utente del sistema sono le tecniche di autenticazione.

Tecniche di autenticazione

Abbiamo tecniche di autenticazione di tipo diverso, ad esempio

  • tecnica basate su password (cosa l’utente esterno conosce).
  • tecniche basate su autenticazione mediante codice inviato su dispositivi in possesso dell’utente associato ad un certo username del sistema (cosa l’utente ha). L’autenticazione a due fattori ne é un esempio.
  • tecniche di autenticazione biometrica (cosa un utente é): scansione della retina o dell’impronta digitale.

Il problemache tutte queste tecniche diverse vanno a risolvere è soltanto quello di mappare un utente esterno su un utente del sistema. Per fare questo sará necessario che nel sistema sia presente un archivio di utenti.

Un esempio di archivio degli utenti di un sistema é il file /etc/passwd dei sistemi Linux. Il suo formato codifica parecchie informazioni per l’utente.

root:!:0:0::/:/usr/bin/ksh
daemon:!:1:1::/etc:
bin:!:2:2::/bin:
uucp:!:5:5::/usr/lib/uucp:
guest:!:100:100::/home/guest:
nobody:!:4294967294:4294967294::/:
jdoe:*:202:1:John Doe:/home/jdoe:/usr/bin/ksh

Nei sistemi distribuiti spesso é un nodo del sistema che si occupa di gestire le richieste di accesso al sistema stesso, effettuando l’autenticazione. In questo caso si fa ricordo a protocolli e tecniche di autenticazione standard quali LDAP, Active Directory oppure a meccanismi basati su HTTP quali Oauth2.

La maggior parte delle tecniche di autenticazione si basano sull’utilizzo di nome utente e password piú eventuali token o informazioni biometriche (su sistemi particolari). Spesso all’autenticazione viene rilasciato un token che ha una validitá temporale finita, dopo di che sará necessario rivalidare il token utilizzando un particolare token di refresh che viene inviato al client che fa la richiesta di autenticazione quando nome utente e password vengono inserite correttamente.

Nome utente e password

Questa tecnica di autenticazione é la piú semplice ed é stata la prima storicamente implementata. Ad ogni richiesta di accesso al sistema viene inviato un nome utente e una password che vengono confrontati con quelli presenti nel file delle credenziali. Se il nome utente e la password sono corretti l’utente é autenticato e per il sistema sará associato ad una identitá del sistema a cui corrispondono quello username e quella password.

Autenticazione Oauth2

L’autenticazione Oauth2 é quella che utilizzi ogni giorno quando accedi a Google o servizi affini. Il funzionamento coinvolge due scambi di dati tra client e server.

L’autenticazione avviene accedendo al server con la risorsa a cui desideriamo accedere. Il server della risorsa ci redireziona al server di autenticazione dove possiamo inserire nome utente e password. Il server di autenticazione ci tornerá un token una volta verificata l’esattezza di nome utente e password.

Con il token potremo poi fare accesso al server delle risorse inglobando il token nella nostra richiesta. Il server delle risorse chiederá al server di autenticazione informazioni sulla validitá del token presentato e, se verrá validato, riceveremo la ricorsa richiesta.

test

Autorizzazione

L’autorizzazione consentirá di associare ad un account del sistema delle operazioni ammesse e le risorse o categorie di risorse a cui l’account avrá accesso. In questo modo sará possibile aggiungere un ulteriore controllo avendo nel sistema sia account che possono fare operazioni critiche (account amministrativi) oppure account che non hanno particolari privilegi.

Utilizzandouno schema di autorizzazione basato sui ruoli(RBAC) sarà possibile assegnare ogni utente ad uno o più ruoli specifici, consentendogli quindi di andare ad effettuare solo le operazioni che sono di sua competenza, riuscendo ad attribuirle in modo semplificato ed efficace. Uno dei vantaggi dell’autorizzazione basata sui ruoli é quello per cui si può andare a definire con un livello di granularità molto specifico le varie operazioni presenti in un sistema, deducendole direttamente dall’analisi funzionale del progetto.

Operando in questo modo lánalisi dei requisiti definisce quali sono le varie funzionalità presenti nel sistema che stiamo studiando e ci consente di andare a raggrupparle nei ruoli a cui potremmo poi associare i singoli utenti, definendo quindi, mediante l’unione tra i permessi di ogni ruolo assegnato, tutte le funzionalitá accessibili per un determinato utente.

Questo tipo di approccio consentirà di definire in modo verificabilei diritti agli utentie consentirà anche di andare a soddisfare le richieste in termini di gestione della privacyed io ho dit definite ad esempio nel GDPR. Sarà inoltre facile modificare cosa un utente puó fare nel sistema perché non si dovrà lavorare a livello di singoli permessi ma si lavorerà a livello di ruoli.

Ad esempio si potrà andarea dire cheil ruolo di amministratore consentirà di accedere a tutte le funzionalità dell’applicazione, mentre il ruolo di data entry potrà accedere soltanto i terminali dell’applicazione io funzionalità specifiche punto ad esempio chi si occupa di marketing non andràa poter inserire i dati relativialla parte fiscale se pensiamo a un’applicazione gestionale.

Andrea Pollini

Matematico, informatico.