Sto creando una app a pagina singola (SPA) e una API RESTful . L'API ha bisogno di sicurezza: alcuni utenti possono effettuare chiamate solo su determinati endpoint. Ho un provider di identità esterno (IdP (Okta)) che voglio che l'utente si autentichi utilizzando il protocollo OpenId Connect . Sto cercando di chiarire i passaggi corretti per l'autenticazione e l'autorizzazione della SPA all'API RESTful. I due flussi che ho visto sono il flusso del codice di autorizzazione e il flusso implicito.
Se dovessi andare con Flusso implicito , i passaggi sarebbero:
- L'utente visita la SPA, che reindirizza l'utente all'IdP per l'accesso.
- Una volta effettuato l'accesso, l'IdP restituisce l'utente alla SPA con un token di accesso e un token ID.
- (Questo è il passo di cui non sono sicuro) Ogni volta che la SPA effettua una richiesta all'API RESTful, passa il token di accesso e il token ID insieme alla richiesta, che l'API RESTful convalida e quindi verifica che l'utente abbia autorità per accedere al particolare endpoint. Se lo fa, restituisce il risultato, altrimenti l'utente non è autorizzato.
Se dovessi utilizzare il flusso del codice di autorizzazione , i passaggi sarebbero:
- Come sopra il passaggio 1.
- Una volta effettuato l'accesso, l'IdP restituisce l'utente alla SPA con un codice di autorizzazione.
- (Anche in questo caso, il passaggio che non sono sicuro è corretto) Ogni volta che la SPA effettua una richiesta all'API RESTful, passa il codice di autorizzazione insieme alla richiesta, che quindi l'API RESTful scambia (insieme a un segreto del client) con l'IdP per un token di accesso e un token ID. Li utilizza per verificare se l'utente può accedere a quel particolare endpoint. Se lo fa, restituisce il risultato, altrimenti non sono autorizzati.
Penso che il flusso implicito sia quello da utilizzare in questo scenario, ma ho i passaggi corretti? In particolare, il passaggio 3, l'invio di due token in ogni richiesta, non sembra corretto. Ma penso di aver bisogno di entrambi i token per convalidare e determinare l'utente. Aiuto apprezzato!