Dove devono essere archiviate le autorizzazioni in un'architettura di micro servizi

0

Al momento stiamo sviluppando un servizio (un'API REST) che viene richiamato dalla nostra applicazione principale. L'applicazione principale contiene una configurazione di utenti / permessi / ruoli che viene utilizzata per verificare se l'utente è in grado di completare le attività sull'applicazione. La relazione ruoli-utente è uno-a-molti.

L'API di terze parti ha vari punti finali. Ora è necessario implementare un sistema di tipi ruolo / permessi per gli endpoint. Ad esempio, il ruolo A potrebbe essere in grado di chiamare un endpoint di creazione / aggiornamento ma non distruggere.

La domanda si trova all'interno del quale i ruoli / permessi devono essere archiviati e verificati per il servizio API REST. Abbiamo già ruoli / permessi impostati nell'applicazione principale e l'aggiunta di ruoli specifici di finanza a questa configurazione sembra la scelta sbagliata. Significa anche che la logica non sarebbe contenuta nel servizio dell'API REST, quindi se dovessimo chiamare gli endpoint di altri servizi in un secondo momento, questo servizio richiederebbe anche l'impostazione di ruoli / permessi.

La domanda in generale è

Se le tabelle / log delle autorizzazioni / ruoli sono archiviate nel servizio API REST (il servizio API REST), sono quasi certo che questo è l'approccio corretto / migliore.

Come assegnare i ruoli / permessi dei servizi API agli utenti dell'applicazione principale. Forse richiede l'installazione di tabelle aggiuntive che contengono ruoli specifici del servizio (questo si sente ancora sporco perché avremmo due diversi posti in cui gli utenti si riferiscono ai ruoli)

Un'altra opzione è quella di avere una tabella roles_users sul servizio API REST che collega l'ID utente principale ai ruoli all'interno del servizio.

Altre considerazioni sono che l'applicazione principale dovrà controllare queste autorizzazioni quasi ogni caricamento della pagina per verificare se alcune informazioni di menu dovrebbero essere visualizzate - possiamo ovviamente memorizzare queste informazioni poiché non dovrebbe essere cambiato spesso.

Il framework è Laravel, ma non penso che questo sia rilevante per la domanda. Incluso nel caso in cui.

    
posta Daniel Benzie 05.11.2018 - 16:17
fonte

2 risposte

4

Inserisci permessi e autenticazione su un servizio di autenticazione separato.

Controlla il nome utente / password ed emette un token firmato contenente tutti i ruoli in cui si trova l'utente.

I microservizi possono quindi controllare la firma del token contro la chiave pubblica e confrontare i ruoli degli utenti con il ruolo richiesto per il metodo che stanno chiamando.

I vantaggi di questo approccio sono che

  • Hai un posto unico che conosce utenti e ruoli. Se un utente ha bisogno di un nuovo ruolo o viene creato un nuovo utente, non è necessario trovare ogni microservizio di cui l'utente avrà bisogno e aggiungere l'utente a ciascuno.

  • I microservizi non devono chiamare un posto centrale per controllare i ruoli. I ruoli sono elencati nel token che viene inviato con la richiesta e hanno la chiave pubblica per il servizio auth e sono quindi in grado di verificare che il token non sia falso.

  • Esistono alcuni flussi di autenticazione standard che utilizzano questo principio come O Auth, per cui è possibile scaricare varie librerie pre-scritte

risposta data 05.11.2018 - 17:03
fonte
0

Chi è in grado di accedere a questo servizio REST? Se la risposta è "solo la tua domanda", allora potrebbe essere perfettamente giustificabile per il tuo servizio affidarsi semplicemente al suo cliente.

Tuttavia, se il servizio REST deve ottenere fiducia per poter eseguire correttamente uno dei suoi obiettivi prescritti, potrebbe essere necessario (ad esempio) creare una sorta di token che il cliente può consegnare a il servizio. Questo token, ad esempio, potrebbe essere qualcosa che il sistema di back-end riconoscerà come un identificatore temporale dell'utente di sistema che ha avviato tutto questo.

    
risposta data 05.11.2018 - 17:46
fonte

Leggi altre domande sui tag