9. Applicazioni native (Native Applications)
Le applicazioni native (Native Applications) sono client (Client) installati ed eseguiti sul dispositivo utilizzato dal proprietario della risorsa (Resource Owner) (ad esempio, applicazione desktop, applicazione mobile nativa). Le applicazioni native richiedono considerazioni speciali relative alla sicurezza, alle capacità della piattaforma e all'esperienza utente complessiva.
L'endpoint di autorizzazione (Authorization Endpoint) richiede l'interazione tra il client e l'user agent (User-Agent) del proprietario della risorsa. Le applicazioni native possono invocare un user agent esterno o incorporare un user agent all'interno dell'applicazione. Ad esempio:
-
User agent esterno (External User-Agent) - l'applicazione nativa può catturare la risposta dal server di autorizzazione utilizzando un URI di reindirizzamento (Redirection URI) con uno schema registrato presso il sistema operativo per invocare il client come gestore, copia e incolla manuale delle credenziali, esecuzione di un server web locale, installazione di un'estensione dell'user agent, o fornendo un URI di reindirizzamento che identifica una risorsa ospitata su server sotto il controllo del client, che a sua volta rende la risposta disponibile per l'applicazione nativa.
-
User agent incorporato (Embedded User-Agent) - l'applicazione nativa ottiene la risposta comunicando direttamente con l'user agent incorporato monitorando i cambiamenti di stato emessi durante il caricamento della risorsa, o accedendo allo storage dei cookie dell'user agent.
Quando si sceglie tra un user agent esterno o incorporato, gli sviluppatori dovrebbero (SHOULD) considerare quanto segue:
-
Un user agent esterno può migliorare il tasso di completamento, poiché il proprietario della risorsa potrebbe avere già una sessione attiva con il server di autorizzazione, eliminando la necessità di riautenticarsi. Fornisce un'esperienza utente e funzionalità familiari. Il proprietario della risorsa può anche fare affidamento su funzionalità o estensioni dell'user agent per assistere con l'autenticazione (ad esempio, gestore di password, lettore di dispositivi a due fattori).
-
Un user agent incorporato può offrire una migliore usabilità, poiché elimina la necessità di cambiare contesto e aprire nuove finestre.
-
Un user agent incorporato pone una sfida di sicurezza perché i proprietari delle risorse si autenticano in una finestra non identificata senza accesso alle protezioni visive presenti nella maggior parte degli user agent esterni. Un user agent incorporato educa gli utenti finali a fidarsi di richieste di autenticazione non identificate (rendendo più facile l'esecuzione di attacchi di phishing).
Quando si sceglie tra il tipo di autorizzazione implicita (Implicit Grant Type) e il tipo di autorizzazione tramite codice (Authorization Code Grant Type), dovrebbe (SHOULD) essere considerato quanto segue:
-
Le applicazioni native che utilizzano il tipo di autorizzazione tramite codice dovrebbero (SHOULD) farlo senza utilizzare credenziali del client, a causa dell'incapacità dell'applicazione nativa di mantenere riservate le credenziali del client.
-
Quando si utilizza il flusso di tipo di autorizzazione implicita, un token di aggiornamento (Refresh Token) non viene restituito, il che richiede di ripetere il processo di autorizzazione una volta che il token di accesso (Access Token) scade.