Protezione del codice di frontend per SPA + API restful con OIDC

2

Ho una Angular 1 SPA con un'API Restful a cui vorrei limitare l'accesso. Come capisco, in genere il flusso implicito di OIDC è progettato proprio per questo. Tuttavia, considero anche il codice SPA di frontend sensibile e vorrei limitare l'accesso a questo. Un'implementazione vaniglia del flusso implicito presuppone che il client frontend sia pubblico e quindi non lo farà.

L'unico modo pratico in cui posso pensare di proteggere gli asset dell'app è tramite un cookie. Il modo in cui ci penso ci sono alcune possibili soluzioni:

  1. Utilizza il flusso del codice di autorizzazione:

    1. Accesso diretto alla schermata di accesso. L'utente effettua l'accesso.
    2. La schermata di accesso richiama l'endpoint Restful API che gestisce il codice di autorizzazione.
    3. Endpoint ottiene il token di aggiornamento / accesso e genera il proprio token di sessione.
    4. Endpoint reindirizza il browser alla SPA, inviandogli il token di sessione nella porzione hash dell'URL. Nella stessa risposta imposta un solo HTTP, cookie sicuro contenente anche il token di sessione.
    5. Serve la SPA solo se la richiesta contiene un cookie con un token di sessione valido.
    6. Una volta nella SPA, analizzare il token di sessione dall'hash e utilizzarlo nell'intestazione Autorizzazione per le richieste dell'API Restful.
      • Pro : mi sembra un modo valido per utilizzare il flusso di codice di autenticazione
      • Contro : sembra troppo complicato. Devo anche gestire lo stato della sessione lato server come le tradizionali app Web.
  2. Utilizza il flusso implicito con una pagina di destinazione:

    1. Accesso diretto alla schermata di accesso. L'utente effettua l'accesso.
    2. La schermata di accesso richiama una pagina di destinazione (una SPA), che analizza il token di accesso dall'hash e lo memorizza in localStorage. La pagina di destinazione ha lo stesso dominio della SPA protetta.
    3. La pagina di destinazione utilizza il token di accesso per effettuare una richiesta API restful. L'endpoint dell'API genera e imposta un cookie sicuro solo HTTP.
    4. La pagina di destinazione riceve il cookie e reindirizza alla SPA protetta.
    5. Fornisci la SPA solo se la richiesta contiene un cookie valido.
    6. Una volta nella SPA, utilizzare il token di accesso da localStorage per effettuare richieste API restful.
      • Pro : non è richiesto lo stato del server
      • Contro : sembra ancora un po 'complicato: ora ho bisogno di due SPA.
  3. Utilizza il flusso implicito con gli asset delle app pigri:

    1. Accesso diretto alla schermata di accesso. L'utente effettua l'accesso.
    2. La schermata di accesso richiama la SPA protetta. La parte non sensibile della SPA è accessibile pubblicamente.
    3. La SPA analizza il token di accesso e fa una richiesta API restful. L'endpoint genera e imposta un cookie sicuro solo HTTP.
    4. La SPA recupera il cookie e carica pigro il resto dell'app.
    5. Il resto degli asset dell'app viene caricato solo se le richieste contengono un cookie valido.
      • Pro : sembra più un tipico utilizzo del flusso implicito, quindi è più facile ragionare sulla sua sicurezza.
      • Contro : la stessa SPA è più complicata a causa del carico pigro (ma forse meno complicato delle altre due soluzioni)

Queste soluzioni sono ragionevoli? Ci sono ancora soluzioni più semplici?

    
posta hhp 05.03.2018 - 18:02
fonte

0 risposte