Autenticazione interna da server a server utilizzando un token singolo

0

Uno dei nostri requisiti di sicurezza richiede l'autenticazione tra i server durante la trasmissione dei dati. Questi endpoint API sono accessibili solo all'interno della rete interna e non vengono mai esposti.

La nostra idea è di utilizzare un singolo schema di autenticazione token. Avremo una coppia token tra i server interni e, a ogni richiesta, il server chiamante invierà il token nell'intestazione della richiesta su HTTPS al server di destinazione. Il server di destinazione autenticherà il token per vedere se corrisponde e se lo fa, elabora la richiesta. In caso contrario, registra il tentativo di connessione non valido.

Riteniamo che implementare OAUTH 2.0 o simili sarebbe eccessivo visto che è interno, controlliamo entrambi i server, c'è un piccolo gruppo di persone con accesso e sarà su HTTPS.

Questa è una soluzione accettabile? Il token verrà generato utilizzando una funzione casuale protetta e memorizzato su ciascun server con diritto di accesso bloccato. Il token non scadrà poiché non è pensato per gli utenti ma per i server.

    
posta Fybe 05.07.2018 - 11:43
fonte

2 risposte

1

Ciò che è accettabile per te dovrebbe dipendere dal valore di qualsiasi cosa tu stia proteggendo e dai rischi inerenti ad altri aspetti del sistema.

In molti casi, il tuo suggerimento potrebbe essere perfettamente ragionevole, ma in altri potrebbe non essere accettabile. Il rischio può essere rappresentato da conseguenze di una violazione, tempi è probabile.

Quindi, se gestisci informazioni molto delicate, ma c'è una possibilità molto bassa che qualcuno possa ottenere quel segreto condiviso, perché hai controlli molto rigorosi su chi potrebbe accedervi ... potrebbe essere ok. Ma se i tuoi controlli sul sistema sono piuttosto rilassanti, la probabilità sarebbe più alta e potrebbe essere inaccettabile. Potresti indirizzarti a uno schema di autenticazione diverso o riducendo le possibilità che qualcuno ottenga quel token.

Alcuni ulteriori suggerimenti per attenuare i rischi relativi a questo tipo di autenticatore:

  • Rendi il segreto condiviso un'impostazione, non una stringa hard-coded
  • Non controllarlo nel controllo del codice sorgente
  • Semplifica il cambiamento in caso di violazione (probabilmente hai un periodo di prova in cui due token sono validi per poter rotolare senza interruzioni)
  • Assicurati che il luogo in cui è archiviato il segreto abbia corretti permessi di file localmente, oppure puoi usare un servizio come Azure KeyVault Secrets in modo che la macchina lo abbia sempre in memoria
  • Utilizzare uno schema crittografico come HMAC per firmare alcuni dettagli dei parametri della richiesta, in modo che il segreto reale non venga mai passato sulla connessione. Entrambi gli account di archiviazione di Azure e S3 funzionano in questo modo.
  • Anche nel campo criptato, potresti usare TOTP, che combina un segreto condiviso con un hash basato sul tempo; ogni gettone trasmesso sul filo sarebbe valido per un tempo molto breve, ma il segreto non cambierebbe mai
  • Accoppia il token con l'indirizzo IP del server a cui è consentito utilizzarlo, limitando così il suo utilizzo al server a cui appartiene
risposta data 05.07.2018 - 15:43
fonte
0

Dato che stai già utilizzando HTTPS, stai già ricevendo i certificati server TLS X.509. Suggerirei di utilizzare il certificato client TLS per l'autenticazione del client. Questo meccanismo di autenticazione è supportato dalla maggior parte dei server Web pronti all'uso.

Ovviamente devi rinnovare i certificati del cliente. Ma questa è la stessa procedura come rinnovare i certificati del server.

    
risposta data 17.07.2018 - 22:23
fonte

Leggi altre domande sui tag