Protezione di un'API REST basata sull'autenticazione con un sito esterno

2

Ho un sito Web con un sistema di autenticazione già stabilito. Una volta che un utente si collega ad esso, una delle funzionalità è un'applicazione di statistica basata su AngularJS.

L'app comunica con un'API REST esterna (creata su Spring) che in pratica fornisce solo 3 funzioni:

  1. Ricevi una richiesta GET, chiedendole di recuperare le statistiche richieste da un database e inviarle all'applicazione front-end
  2. Ricevi una richiesta POST, consentendo agli utenti di salvare alcune opzioni configurabili nello stesso database. Quindi la tabella delle opzioni nel DB avrebbe mantenuto l'ID utente del richiedente e diversi valori facoltativi
  3. Ricevi una richiesta GET per recuperare tali opzioni in un secondo momento

Per quanto riguarda la sicurezza, il sito Web e il front-end dell'applicazione sono coperti, ma ora devo proteggere il servizio web e, a causa della scarsa conoscenza dell'argomento, non riesco a capire il metodo migliore.

Fondamentalmente ho bisogno di assicurarmi che ogni richiesta al servizio web provenga da una fonte autorizzata (cioè un utente autenticato del sito) e anche che tutte le richieste che coinvolgono informazioni specifiche dell'utente (punti 2 e 3 sopra) provengano effettivamente da quell'utente.

Si noti che non è necessario autenticarsi rispetto ad alcuni elenchi di utenti configurati sul lato del servizio Web, ma se arriva una richiesta che dice "dammi le opzioni dell'utente1", deve essere utente1 chi lo richiede.

Opzioni che ho esaminato finora:

  1. SAML - Che inizialmente sembrava un buon adattamento, ma in realtà non sembra applicabile ai servizi web REST
  2. HMAC - Posso fare in modo che l'applicazione invii una chiave basata su una combinazione dell'id utente e dell'ID dell'applicazione web che possono essere decodificati solo con un salt al servizio web? Quindi, quando viene decrittografato, l'ID dell'applicazione può essere confermato e inoltre può essere verificato che l'ID utente nella chiave crittografata corrisponda a ciò che è stato passato nel parametro "userid" della richiesta?
  3. SSL - Sto solo pensando troppo a questa cosa? Potrei semplicemente usare un certificato nell'applicazione web che è attendibile dall'API e quindi confermare che la richiesta proviene dall'applicazione e non può essere stata manipolata in alcun modo?
posta ctrlz 01.03.2016 - 19:34
fonte

0 risposte

Leggi altre domande sui tag