Autenticazione e Autorizzazione
Autenticazione e autorizzazione sono parti essenziali di un'API pubblica per evitare letture e scritture non desiderate.
Autenticazione
Gli utenti possono autenticarsi tramite l'endpoint POST /sessions, inviando un body nel formato:
{
"username": "foo",
"password": "bar"
}
Queste credenziali devono corrispondere ad un utente nel database. Se l'utente è trovato e le credenziali sono valide, un token JWT è emesso e restituito come risposta:
{
"token": "..."
}
Questo token può essere allegato all'header Authorization come Bearer token alle chiamate seguenti per autenticarle. Il token contiene informazioni riguardo all'utente e ai suoi permessi:
{
"groups": "SiteManagers,AppKeyIssuers,SiteEditors",
"editableSites": [],
"validUntil": "...",
"exp": "..."
}
Autorizzazione
L'autorizzazione è ortogonale all'applicazione, nel senso che è implementata come uno strato posto di fronte all'API REST, bloccando l'accesso agli endpoint agli utenti non autorizzati (o non autenticati). Endpoint diversi possono avere regole diverse in fatto di autorizzazione.
Il meccanismo di autorizzazione sfrutta il supporto di ASP.NET, il che significa che la generazione e la verifica del JWT sono effettuati in gran parte dal framework stesso. Sono definite delle policy di autorizzazione, utilizzate dagli endpoint per limitare l'accesso agli utenti autenticati, oppure agli utenti con privilegi elevati (gruppo SiteManagers). Le policy sono Default e Admin: sono definite nel file Presentation/Extensions/AuthConfigurationExtensions. La policy Default controlla che l'utente sia autorizzato ad agire su un determinato sito quando un parametro siteId viene passato nell'url della richiesta. La policy Admin si assicura che l'utente faccia parte del gruppo SiteManagers.