Sono in procinto di configurare SSO per un servizio che sto creando. Dopo aver esaminato le soluzioni, non ho trovato nulla che si adatta esattamente a ciò di cui abbiamo bisogno. Sto cercando di accertarmi da un punto di vista della sicurezza che ciò che stiamo per implementare sia sicuro. E se c'è un'altra soluzione che abbiamo ignorato, mi piacerebbe vederlo.
Ai fini di questo problema, assumiamo i seguenti oggetti: - AUTH: questa è la casella di autenticazione SSO che contiene le credenziali delle persone e memorizza i dettagli di autorizzazione per altri servizi - A - il primo servizio (questo è un servizio di front-end) su a.com - B - il secondo servizio (servizio back-end) su b.com - C - il terzo servizio (servizio back-end) su c.com - U - l'utente che accede ai servizi di cui sopra
Il flusso di lavoro che sto cercando di verificare è sicuro / sano è:
- U vuole utilizzare il servizio protetto A
- Un reindirizzamento da U a AUTH
- U si firma su AUTH
- AUTH reindirizza a A con un token che identifica l'utente U
- A vuole comunicare con B, che vuole comunicare a C per conto dell'utente
- A invia una richiesta di back-end (nessuna sessione del browser) a B con token
- B inoltra quel token a C
- C utilizza il token per identificare l'utente U
Il motivo per cui oauth non ha senso per me è perché AUTH, A, B e C sono tecnicamente risorse, quindi quindi ognuno di loro dovrebbe essere un fornitore e ognuno sarebbe un client per un altro.
Quello che ho pensato come soluzione è usare JWT (Token Web JSON). Dopo l'autenticazione, AUTH fornirebbe un JWT in scadenza come token firmato da una chiave privata RS256. Ogni servizio (A, B, C) può verificare l'autenticità del token confrontandolo con la chiave pubblica di AUTH. Su richiesta (cioè A parla con B), B conosce l'utente U e quindi può ping AUTH per verificare se U ha accesso a B.
Mi manca qualcosa? Mi è sempre stato detto di non implementare mai protocolli di sicurezza, quindi sono riluttante ad adottare questa soluzione. Tuttavia, non so quale sarebbe il modo migliore per gestirlo.