JWT con segreto condiviso per condividere dati tra servizi di diversi fornitori

1

Offriamo una piattaforma che fornisce determinati servizi di elaborazione dati. Tutte le nostre API sono accessibili tramite i servizi RESTful. Tutti i servizi richiedono l'autenticazione e l'autorizzazione per funzionare correttamente (i dati specifici dell'utente / client vengono elaborati). Tutte le autorizzazioni funzionano con token JWT inviati utilizzando l'intestazione http di autorizzazione. Esiste un servizio di autenticazione che genera detto JWT all'accesso e lo firma con una chiave segreta condivisa.

Questo design ha funzionato bene finora per noi. Tuttavia, si basava su un presupposto: la gestione degli utenti sarebbe sempre stata gestita da noi.

Ora abbiamo un progetto client in arrivo in cui non vogliamo mantenere alcun dato utente. Tutte le informazioni dell'utente devono risiedere con il nostro cliente. Gli utenti dovrebbero essere in grado di accedere con il nostro client, ma poi essere in grado di utilizzare i nostri servizi dopo il login.

Il modo semplice per farlo sarebbe quello di aggiungere una nuova chiave segreta condivisa che sarà nota al servizio di autenticazione del nostro cliente ea tutti i nostri servizi. Il nostro cliente potrebbe quindi generare JWT valide e, oltre alla normale chiave segreta condivisa, aggiungere una fase di convalida per verificare se un JWT inviato è stato firmato dal nostro cliente.

L'alternativa potrebbe essere uno schema di autenticazione basato su oauth. Ma siamo riluttanti a implementare tale schema in quanto sarebbe sostanzialmente più impegnativo.

Quindi la mia domanda è: vedi problemi o svantaggi gravi con il nostro approccio preferito (chiave segreta condivisa)? C'è qualche grave svantaggio che non vediamo? E in generale sarebbe una soluzione che consiglieresti?

    
posta fjc 12.05.2018 - 20:51
fonte

1 risposta

2

Non condividerei un segreto. Userei la crittografia asimmetrica come RSA e fare in modo che ogni servizio generi una coppia di chiavi, quindi condividiamo le loro chiavi pubbliche l'una con l'altra. In questo modo possono entrambi validare e firmare i JWT creati dall'altro come necessario.

    
risposta data 13.05.2018 - 00:13
fonte

Leggi altre domande sui tag