GNAP: OAuth la prossima generazione

L'anno era il 2012 e un protocollo di sicurezza modificato chiamato OAuth 2 ha invaso il Web, consentendo agli utenti di utilizzare i fornitori di sicurezza per accedere facilmente ai siti Web. Molti sistemi Single Sign-On, da Cognito di AWS a Okta, implementano OAuth. OAuth è ciò che ti consente di "autenticarti con Google" o altri fornitori su un sito web o un'applicazione completamente diversi.

Funziona come una festa della birra. Vai a una scrivania e ti autentichi con il tuo ID (e un po 'di soldi), e ti danno i gettoni. Da lì, vai in ogni tenda della birra e scambia un gettone con una birra. Il singolo birraio non ha bisogno di controllare la tua carta d'identità o chiedere se hai pagato. Prendono il gettone e ti danno una birra. OAuth funziona allo stesso modo, ma con i siti web invece delle birre.

Purtroppo, OAuth è il miglior festival della birra che il 2020 ha da offrire.

Ho parlato con Dan Moore di FusionAuth di OAuth e di una proposta sostitutiva chiamata GNAP, che è probabilmente pronunciata senza la G come "pisolino". La pronuncia promuove l'idea che la sicurezza sia un campo davvero eccitante. GNAP affronta alcune limitazioni di OAuth e lo arricchisce di nuove funzionalità.

Perché sostituire, o piuttosto aumentare, OAuth? OAuth è stato progettato intorno ai browser. Si presume che il mittente che effettua la richiesta possa gestire un reindirizzamento HTTP. Questo focus del browser web è un ostacolo per le app mobili o qualsiasi tipo di "cosa" sull '"Internet of Things". Inoltre, le parti OAuth come se fosse il 2007 e richiedono di pubblicare i parametri del modulo invece di JSON.

Le specifiche OAuth erano vaghe in alcuni punti e il mondo è cambiato dal 2012. C'è un gran numero di RFC e BCP, essenzialmente specifiche aggiuntive che è necessario implementare per maggiori capacità, migliore sicurezza e compatibilità generale. Uno sforzo separato chiamato OAuth 2.1 spera di comprimere alcuni di questi componenti aggiuntivi in ​​un'unica specifica più coerente. Per alcune delle motivazioni per OAuth 2.1, vedere Lee McGovern dal post di Okta "Quante RFC ci vogliono per cambiare una lampadina". OAuth 2.1, a differenza di GNAP, è solo una versione incrementale senza nuove modifiche significative oltre a combinare lo stack di specifiche in un'unica specifica.

La specifica GNAP è ancora nelle sue fasi iniziali. Gli autori di GNAP intendono andare oltre OAuth 2.1 e cambiare la natura del protocollo stesso. Invece di utilizzare i parametri HTTP, puoi utilizzare JSON. Gli endpoint dell'applicazione sono rilevabili. Non è necessario supportare i reindirizzamenti (o i vari hack in merito). Moore si riferisce a questi cambiamenti con il delizioso termine "ergonomia dello sviluppatore".

Un obiettivo chiave di GNAP è la separazione di chi richiede le risorse (RQ) e chi possiede le risorse (RO).

IETF

GNAP propone inoltre di supportare nuove funzionalità di sicurezza come:

  • Avvio asincrono e URL dell'applicazione. Si tratta di diversi percorsi di autenticazione che consentono al client di autenticarsi senza un reindirizzamento. GNAP consente inoltre alle applicazioni di autenticarsi su risorse di terze parti a cui il server di risorse e il server di autorizzazione non hanno accesso diretto.
  • Richiedi continuazioni. Questi consentono ai client di negoziare cose come reindirizzamenti o altri dettagli di autenticazione durante il processo di autenticazione. Consentono inoltre a un client di negoziare per ulteriori privilegi o token di accesso.
  • Token di accesso multipli. Questi consentono ai client di autenticarsi su molte risorse contemporaneamente, ad esempio, sia come utente che come amministratore.
  • Token di vincolo del mittente. Sebbene siano presenti componenti aggiuntivi per OAuth 2 per questa funzionalità denominati DPOP e MTLS, GNAP lo integrerebbe direttamente nel protocollo. Torna al nostro esempio di tenda della birra. E se dovessimo anche sussurrare una password all'orecchio del venditore mentre gli consegnava il token? Se il nostro token fosse caduto (o intercettato), non sarebbe stato importante perché il portatore non avrebbe la password.
  • E GNAP fa urlare il fantasma di Kerberos.

Suona bene? Puoi iniziare a usare GNAP oggi? Se sei interessato a collaborare, puoi eseguire il fork di uno dei prototipi che sono entrati nella proposta esistente su GitHub.

Secondo Moore, gli autori mirano a rilasciare GNAP nel 2022. Poiché ogni giorno nel 2020 è come una settimana in un anno tipico, GNAP è molto lontano. Tuttavia, il gruppo di lavoro GNAP sta cercando collaboratori e puoi iscriverti alla mail list e offrire il tuo feedback e la tua esperienza. Immagino che tu non possa aggiustare tutto nel mondo, ma puoi almeno aiutare a riparare OAuth.