2013-04-28 14 views
13

Sto esplorando l'architettura orientata ai servizi di base e mi chiedo come gestire al meglio l'autenticazione utente in tutti i servizi.Architettura centralizzata di autenticazione in servizio

Come un esempio molto semplice, supponiamo di avere un'applicazione blog che chiama ad altri due servizi:

  1. Un servizio di utente/autenticazione per la memorizzazione dei dati degli utenti e lo scambio di credenziali per un token di accesso
  2. A post servizio per la gestione dei dati postali

Supponiamo che un utente dell'applicazione stia tentando di eliminare un determinato post e che solo gli utenti con un ruolo di "amministratore" possano farlo.

Le seguenti richieste dovrebbero essere fatte:

  • app -> auth

    autenticare l'utente corrente (attraverso una sorta di token). Se il token è scaduto l'applicazione potrebbe reindirizzare l'utente a un form di login, ecc

  • app -> Messaggi

    cancellare il post.

  • messaggi -> auth

    Prima di un post viene cancellato, il servizio postale ha bisogno per assicurarsi che l'utente richiedente ha il permesso di farlo. Autentica l'utente corrente (tramite token) e assicurati che abbia il ruolo di "admin".

Questo è un esempio troppo semplice, ma sono curioso di sapere come le persone si occupano di auth in tutti i loro servizi. Sembra probabile che ogni servizio debba effettuare una chiamata separata al servizio di autenticazione per autorizzare la richiesta. È questo il caso? Ci sono modi migliori per gestire l'autenticazione in questo tipo di SOA?

Grazie!

risposta

6

È possibile implementare un identity provider - Una volta che un utente si autentica con il servizio di autorizzazione/autenticazione, deve ottenere un token che la identifichi. Questo token può identificarla (ruoli/attestazioni) e firmata dalla chiave privata del servizio di autenticazione/autorizzazione. Quando un servizio riceve un token di sicurezza e viene firmato da un'autorità attendibile, non è necessario accedere nuovamente al servizio di autenticazione/autorizzazione.

Se il sistema ha requisiti di sicurezza più elevati (ad esempio a livello di utente), potrebbe essere necessario un reclamo elaborato o accedere al sistema di autorizzazione per ciascuna richiesta. Ho lavorato una volta su un sistema in cui determinati tipi di informazioni richiedevano l'autorizzazione su ogni accesso e altri tipi erano ok con la sicurezza basata sui ruoli - la tua fresatura può variare.

+0

Stai suggerendo che il token stesso includa i ruoli di un utente? – scttnlsn

+1

Tutto dipende dai tuoi requisiti di sicurezza. se per la durata del token puoi vivere senza gestire una revoca dell'autorizzazione, puoi usarla. Nei casi in cui non ti puoi permettere devi autorizzare su ogni richiesta. Si noti che se il provider di identità e i servizi che lo utilizzano vengono distribuiti sugli stessi server, il sovraccarico può essere ragionevole. per esempio. agente di politica in OpenAM https://wikis.forgerock.org/confluence/display/openam/Authentication+and+Authorization+Overview –

+0

Buono a sapersi ... grazie! – scttnlsn

Problemi correlati