Questo componente fornisce l'implementazione del protocollo OAuth2 nei componenti lato server.
Questo componente fornisce l'implementazione del protocollo OAuth2 nei componenti lato server.
I componenti server dispongono di una proprietà denominata Authorization.OAuth.OAuth2 dove è possibile assegnare un'istanza di TsgcHTTP_OAuth2_Server; se l'autenticazione è abilitata e la proprietà OAuh2 è collegata al componente Server OAuth2, le richieste WebSocket e HTTP richiedono un Bearer Token per essere elaborate, altrimenti la connessione verrà chiusa automaticamente.
OAuth2 := TsgcHTTP_OAuth2_Server.Create(nil);
Server.Authentication.Enabled := True;
Server.Authentication.OAuth.OAuth2 := OAuth2;
Il server supporta i seguenti tipi di autorizzazione:
- auth2Code: Viene utilizzato per eseguire l'autenticazione e l'autorizzazione nella maggior parte dei tipi di applicazioni, incluse le applicazioni a pagina singola, le applicazioni Web e le applicazioni installate nativamente. Il flusso consente alle app di acquisire in modo sicuro access_token che possono essere utilizzati per accedere a risorse protette, nonché refresh token per ottenere ulteriori access_token e ID token per l'utente connesso.
- auth2ClientCredentials: Questo tipo di grant è comunemente utilizzato per interazioni server-to-server che devono essere eseguite in background, senza interazione immediata con un utente. Questi tipi di applicazioni sono spesso indicati come daemon o account di servizio.
- password (Resource Owner Password Credentials): Consente a un'applicazione di far accedere l'utente gestendo direttamente le sue credenziali. Il client invia il nome utente e la password dell'utente all'endpoint del token.
- urn:ietf:params:oauth:grant-type:device_code (Device Code): Device Authorization Grant secondo l'RFC 8628. Consente ai dispositivi con input limitato (smart TV, dispositivi IoT) di ottenere l'autorizzazione dell'utente facendo sì che l'utente effettui l'autorizzazione su un dispositivo secondario.
Il tipo di autorizzazione può essere personalizzato durante la registrazione dell'app; per impostazione predefinita, tutti i tipi di autorizzazione sono supportati.
EndPoints
Per impostazione predefinita, il componente è configurato con i seguenti endpoint per gestire le richieste di autorizzazione e token
Authorization: /sgc/oauth2/auth
Token: /sgc/oauth2/token
Revocation: /sgc/oauth2/revoke
Introspection: /sgc/oauth2/introspect
Autorizzazione dispositivo: /sgc/oauth2/device
Verifica del dispositivo: /sgc/oauth2/device/verify
Quindi se il server è in ascolto sulla porta 443 e il dominio è www.esegece.com, gli EndPoint saranno:
Authorization: https://www.esegece.com/sgc/oauth2/auth
Token: https://www.esegece.com/sgc/oauth2/token
Revocation: https://www.esegece.com/sgc/oauth2/revoke
Introspezione: https://www.esegece.com/sgc/oauth2/introspect
Device Authorization: https://www.esegece.com/sgc/oauth2/device
Verifica dispositivo: https://www.esegece.com/sgc/oauth2/device/verify
Gli endpoint possono essere configurati nella proprietà OAuth2Options.
Per impostazione predefinita, PKCE (un'estensione al flusso Authorization Code per prevenire attacchi CSRF e injection del codice di autorizzazione) è abilitato.
Configurazione
Prima di poter avviare il processo OAuth2, è necessario registrare le app che saranno disponibili; ciò avviene tramite la proprietà Apps del componente server OAuth2.
Registra app
Utilizzare Apps.AddApp per aggiungere una nuova applicazione al server OAuth2; è necessario impostare i seguenti parametri:
- App Name:
è il nome dell'applicazione. Esempio: MyApp
- RedirectURI:
è il punto dove verranno reindirizzate le risposte. Esempio: http://127.0.0.1:8080
- ClientId:
è un'informazione pubblica ed è l'ID del client.
- ClientSecret:
deve essere mantenuto riservato.
Facoltativamente è possibile impostare i seguenti parametri:
- ExpiresIn:
per impostazione predefinita è 3600 secondi, quindi il token scadrà in 1 ora; è possibile impostare un valore maggiore se necessario.
- RefreshToken:
per impostazione predefinita i token di aggiornamento sono supportati; se non lo sono, impostare questo parametro su false.
- AllowedGrantTypes: per impostazione predefinita tutti i tipi di grant sono supportati (auth2Code e auth2ClientCredentials), ma il server può essere configurato per consentire solo l'Authorization Code o solo le Client Credentials.
Elimina app
Utilizzare Apps.RemoveApp per eliminare un'App esistente.
AddToken
Se il server è stato riavviato mentre erano stati emessi alcuni token, è possibile recuperare questi token utilizzando il metodo AddToken prima di avviare il Server OAuth2 e dopo aver registrato le App
- AppName: il nome dell'applicazione.
- Token: token di accesso.
- Expires: quando il token scade.
- RefreshToken: token di aggiornamento.
RemoveToken
Rimuove un Token già emesso.
OAuth2Options
La proprietà OAuth2Options consente di configurare gli endpoint del server e le funzionalità opzionali.
Revoca
Revoca del token secondo RFC 7009. Se abilitata, i client possono revocare token di accesso o refresh precedentemente emessi.
- OAuth2Options.Revocation.Enabled: impostare su True per abilitare l'endpoint di revoca.
- OAuth2Options.Revocation.URL: il percorso URL dell'endpoint. Predefinito: /sgc/oauth2/revoke
Introspezione
Introspezione del token per RFC 7662. Quando abilitata, i resource server possono interrogare il server di autorizzazione per determinare lo stato attivo e i metadati di un token.
- OAuth2Options.Introspection.Enabled: impostare su True per abilitare l'endpoint di introspezione.
- OAuth2Options.Introspection.URL: il percorso URL dell'endpoint. Predefinito: /sgc/oauth2/introspect
DeviceAuthorization
Device Authorization Grant secondo RFC 8628. Quando abilitato, i dispositivi con input limitato possono richiedere l'autorizzazione facendo autorizzare l'utente su un dispositivo secondario.
- OAuth2Options.DeviceAuthorization.Enabled: impostare su True per abilitare l'endpoint di autorizzazione del dispositivo.
- OAuth2Options.DeviceAuthorization.URL: il percorso URL dell'endpoint per le richieste di device code. Predefinito: /sgc/oauth2/device
- OAuth2Options.DeviceAuthorization.VerificationURL: il percorso URL dell'endpoint per la pagina di verifica utente. Valore predefinito: /sgc/oauth2/device/verify
- OAuth2Options.DeviceAuthorization.ExpiresIn: la durata in secondi del codice dispositivo. Predefinito: 600 (10 minuti).
- OAuth2Options.DeviceAuthorization.Interval: l'intervallo di polling minimo in secondi che il client dovrebbe utilizzare quando esegue il polling dell'endpoint token. Predefinito: 5.