Micro service REST con autenticazione / autorizzazione utente Javascript

0

Sono abbastanza nuovo nell'architettura dei microservizi. Sto cercando di costruire un'applicazione web in questo modo. Dopo alcune ricerche online sui microservizi e l'esperienza con Spring e Angular, desidero creare un'applicazione web con API REST back-end separate front-end e multiple (separate).

Come voglio progettare la mia applicazione è un front-end javascript / html / css (sviluppato da me, nessun client esterno). Il front-end comunicherà tramite un gateway API (proxy inverso) alle mie API REST back-end. Le API REST saranno microservizi diversi. Voglio che l'utente esegua l'accesso una volta (SSO) per essere autenticato e autorizzato per le API REST. Alcune API saranno pubbliche, ma alcune devono essere protette. Anche questo potrebbe essere su diversi livelli (admin e user's API).

Front end -> API Gateway --> Authorization server
                         |-> User REST API (User and Admin)
                         |-> Statistics REST API (User and Admin)
                         |-> Admin user overview REST API (Admin only)

La cosa che mi preoccupa è l'autenticazione / autorizzazione dell'utente. (È un grosso problema nella mia app). Questo è dove mi sono perso. Ho fatto qualche ricerca online per questo e ci sono molte persone che raccomandano Oauth2 per questo. Anche se ho pensato che Oaut2 è per l'autorizzazione dell'applicazione alla domanda sembra esserci un flusso di autorizzazione per le applicazioni web basate su javascript (Il flusso implicito). Voglio che l'utente effettui il login nel front end, nessuna autenticazione social o altro. Completa il tuo sistema sviluppato.

In realtà è un linguaggio agnostico (quasi ogni lingua può implementare OAuth2). Sto cercando il modo migliore per implementare l'autenticazione e l'autorizzazione di sicurezza. Ma mi chiedevo se OAuth2 fosse la cosa giusta per questa architettura. Il flusso implicito di Oauth2 è abbastanza buono per il mio front end sviluppato? O potrei / dovrei usare il flusso della password?

Se Oauth non è adatto a questo obiettivo, che cosa dovrebbe essere usato allora? Ho letto di JWT ma non sono sicuro che sia quello di cui ho bisogno. E se Oauth2 è adatto alla mia situazione, dovrei usare il flusso Implicito o Password?

Spero che voi ragazzi potete aiutarmi a decidere e spiegare un po 'le cose.

Grazie!

    
posta Fjarlaegur 30.04.2017 - 20:26
fonte

2 risposte

0

I want the user to log in in the front end, no social authentication or anything.

Non c'è nulla di sociale in OpenID / OAuth2. Fondamentalmente, il vantaggio di OpenID e OAuth2 è che lo sviluppatore faccia affidamento su un sistema esterno per gestire tutta l'autenticazione nel primo caso e l'autorizzazione nel secondo caso.

Per lo sviluppatore, ciò significa che:

  • Lo sviluppatore non si assume il rischio di introdurre bug che, in definitiva, consentirebbero a un hacker di accedere al sistema come un utente diverso o manomettere le credenziali dell'utente.

  • Il sistema non memorizza alcuna password hash, il che rende il sistema molto meno interessante da hackerare per qualcuno che vuole ottenere le password degli utenti.

  • Lo sviluppatore aggiunge facilmente servizi extra.

  • Quando un provider inizia a supportare una funzione di sicurezza aggiuntiva, come Autenticazione a due fattori , la ricevi gratuitamente.

Per l'utente, ciò significa che:

  • C'è una password in meno da ricordare se l'utente è già registrato sul sito web di terze parti che fornisce il servizio OpenID / OAuth2.

  • Oppure, c'è un altro account da creare se l'utente non è registrato sul sito Web di terze parti. Questo potrebbe essere un problema quando l'utente non vuole registrarsi su quel sito Web di terze parti. Ad esempio, se rendi obbligatorio avere un account Facebook per utilizzare il tuo prodotto, non sarò tra i tuoi clienti.

  • L'esperienza utente complessiva diventa leggermente più povera, a causa di reindirizzamenti multipli, nonché della perdita di contesto ("Perché sono reindirizzato a Facebook? È un errore?")

L'attuale provider OpenID e OAuth2 potrebbe essere qualsiasi cosa: mentre è vero che molti siti Web sociali ti permettono anche di usare OpenID / OAuth2, non sono soli. I fornitori non sociali includono SalesForce, PayPal e Amazon.

Complete own developed system.

Perché lo faresti?

Come spiegato sopra, il vantaggio di OpenID / OAuth2 è quello di mitigare il rischio spostando codice complesso e dati sensibili dai server. Lascia che esperti di Amazon o Google gestiscano questa cosa. Non mettere a rischio te stesso e i tuoi utenti. A meno che, naturalmente, non sia l'esperto e tu abbia lavorato per l'ultimo decennio sui sistemi di autenticazione, nel qual caso, provaci.

But i was wondering is OAuth2 is the right thing for this architecture. Is the Oauth2 implicit flow good enough for my own developed front end? Or could/should i use the password flow?

OpenID è il flusso della password. Apri il pannello Strumenti dello sviluppatore nel browser e monitora il flusso di rete; vedrai che non c'è magia lì. Per la tua applicazione web, sarà abbastanza semplice impostare OpenID o OAuth2, a seconda della maturità delle librerie di thir-party disponibili per la tua lingua preferita.

Tuttavia, quando si tratta di accedere alle API dal client, si avranno problemi in entrambi i casi: ad un certo momento, l'applicazione web dovrebbe dire all'API che un utente specifico con una chiave e un segreto specifici dovrà accedervi.

Fondamentalmente, a un certo punto, l'app o l'API dovranno generare una coppia chiave-segreta che verrà poi utilizzata dal browser quando eseguirà richieste AJAX su tale API. L'app dovrebbe inoltre comunicare all'API che una determinata chiave è associata a un determinato utente: in questo modo, l'utente sarà in grado di accedere ai suoi dati, ma non ai dati di qualcun altro.

Questo meccanismo è indipendente dalla scelta tra OpenID / OAuth2 e un sistema fatto in casa. Lo scopo dell'autenticazione è l'applicazione web; Le API non autenticano gli utenti ; autenticano altre applicazioni, si tratterebbe della tua app web o di una terza parte.

    
risposta data 01.05.2017 - 12:08
fonte
0

Il riposo riguarda l'utilizzo dei meccanismi già esistenti di Internet. Il Web offre già diversi meccanismi di autenticazione http.BASIC, Digest, ecc. Prendi in considerazione l'utilizzo dell'autenticazione di base su ssl.

    
risposta data 02.05.2017 - 02:55
fonte