Con HTTPS, posso conoscere con certezza il dominio client per l'autenticazione con la mia API

2

Ho difficoltà a trovare il titolo migliore per questa domanda, ma lascia che ti spieghi la mia situazione:

Ho un'app di chat-room-as-a-service simile a Intercom. Chiunque può caricare la chat in un iframe e visualizzarla nel proprio sito. Voglio fare in modo che i creatori di siti possano richiedere uno "spazio dei nomi", cioè acme inc e quindi passarlo come parametro nell'URL iframe src .

Il problema è che chiunque potrebbe unirsi alla chat della società semplicemente digitando il nome come parametro nel proprio URL iframe. Ho bisogno di un modo per verificare che quando un host si connette alla mia app con un parametro "nome", che sia l'host corretto e non uno spoofer.

Questo è tutto in JavaScript, a proposito, ma dal momento che questo è sicurezza e non Stack Overflow, non mi aspetto che qualcuno mi dia il codice corretto, solo concetti importanti. Grazie.

    
posta max pleaner 06.05.2017 - 00:20
fonte

1 risposta

2

Hai visto token per macaroon ? Ho sempre voluto usarli per i processi di autorizzazione ma non ne ho avuto la possibilità, tuttavia sembrano una potenziale corrispondenza per il tuo caso d'uso.

Ecco il documento di ricerca ed ecco uno strumento demo molto semplice .

Potresti ad esempio aggiungere diversi avvertimenti come l'IP del client o altre impronte digitali simili in modo che un amaretto rubato non possa essere usato altrove. O forse puoi limitare il tempo di scadenza a 1 minuto o persino richiedere un macaroon per richiesta (cioè un messaggio di chat o qualcosa del genere forse?).

Sfortunatamente per qualche motivo non sembra esserci un'ampia adozione di questo concetto molto interessante, quindi molte cose sono vecchie e non sono sicuro di come siano mantenute le diverse librerie, quindi l'utilità potrebbe essere limitata per te, a seconda sul tuo caso.

Tuttavia la tecnica più comune che ho visto è fondamentalmente solo l'uso dei cookie (con tempi di scadenza brevi, a seconda del caso d'uso) per mantenere identificatori di sessione lato server, che è possibile utilizzare per controllare l'accesso. Assicurati di utilizzare HTTPS per inviarli.

Modifica per indirizzare il commento:

Ecco una libreria javascript per i maccheroni .

Ciò che intendevo per impronta digitale era ottenere una sorta di informazioni dall'utente (al momento dell'accesso) e aggiungendoli come un avvertimento di Amaretto . per es.

  • Aggiungi un'e-mail valida per quel "spazio dei nomi" in modo che l'utente X nel namespace N non possa semplicemente saltare nello spazio dei nomi M.

  • Crea una whitelist con l'intervallo noto di indirizzi IP per ogni client che ha l'autorizzazione ad accedere alla chat. Puoi provare a determinare l'IP tramite perdita WebRTC ma richiede un browser che supporti WebRTC e la perdita potrebbe essere risolta in seguito, a seconda del browser.

La risposta per determinare l'IP del client dipenderà dal tuo particolare caso d'uso. Esistono molte soluzioni diverse che presentano una quantità variabile di rapporto costi / benefici che solo tu puoi valutare.

Ad esempio, potresti usare un server Node, ma se non ne hai già uno, questo potrebbe essere costoso in termini di nuova infrastruttura, codice, ecc. Forse hai un server Tomcat che puoi già usare per trovare l'IP e può collegarlo, ecc. Ma hanno tutti implicazioni di sicurezza diverse e costi associati, quindi questa sarebbe una domanda molto ampia.

Modifica:

Ho letto anche alcuni commenti su come i JWT sono insicuri se li stai utilizzando per sessioni lato client. Quindi potrei aggiungere questo nel caso qualcuno lo raccomandi.

Questo articolo: JSON Web I token dovrebbero essere evitati stimolati dalla discussione di persone che lavorano nel campo, per esempio questo commento di Thomas Ptacek.

Estratto piccolo:

The issue with JWT in particular is that it doesn't bring anything to the table, but comes with a whole lot of terrifying complexity. Worse, you as a developer won't see that complexity: JWT looks like a simple token with a magic cryptographically-protected bag-of-attributes interface. The problems are all behind the scenes.

    
risposta data 06.05.2017 - 01:05
fonte

Leggi altre domande sui tag