2014-04-29 4 views
11

Ho riscontrato un problema durante il passaggio dall'autenticazione basata su cookie a quella basata su token nelle applicazioni Ember/Angular/Backbone.Come utilizzare l'autenticazione basata su token per accedere alle risorse protette in linea?

L'intoppo è che le intestazioni delle richieste non possono essere impostate sui tag img.

Alcuni hanno suggerito di aggiungere i parametri del token alla fine della richiesta, in modo da sporcare i registri del server con token di autenticazione.

Quale (se presente) è il modo corretto per accedere alle risorse in linea protette tramite l'autenticazione basata su token?

+0

Solo curioso, ma le immagini sono parti dell'interfaccia utente o sono effettivamente risorse che richiedono protezione? Ho lavorato su un progetto che prima aveva entrambi i tipi, e abbiamo finito per fare richieste di immagini per le immagini "protette" attraverso il server di backend per ottenere l'autenticazione - e le immagini dell'interfaccia utente che abbiamo deciso di non preoccuparci di proteggere in questo modo. – aet

+0

Le risorse devono essere protette. È un'applicazione di gestione del progetto, i clienti possono caricare immagini/film/documenti/qualsiasi cosa e definire acl su di essi. Le immagini dell'interfaccia utente sono risorse pubbliche e non sono protette. –

+1

perché non instradare le richieste di immagine attraverso la tua applicazione web? il backend quindi può inviare intestazioni appropriate per restituire l'immagine corretta – Alp

risposta

9

avvertimento importante: io non sono un esperto di sicurezza (ma mi diletto)

In passato ho usato Amazon S3 e la loro sicurezza basata su token per le attività. Ciò consente di generare URL privati ​​e anche temporanei per l'accesso alle risorse. Si potrebbe anche implementare un meccanismo simile sul proprio server, ma tenere a mente si sarà ora ospitare e servire i beni stessi in modo da tenere a mente per cose come l'uso della larghezza di banda, la cache, ecc

This post sembra avere una bella tutorial dettagliato sulla protezione delle immagini usando AngularJS e Amazon.

Se non si desidera percorrere la rotta Amazon, è necessario implementare una sorta di token/sistema di sicurezza autonomamente e sono disponibili numerosi approcci. Dipenderà in gran parte dal livello di sicurezza che desideri.

  1. È possibile caricare i dati dell'immagine in modo programmatico senza URL. Dovrebbe essere possibile usare i CSS e base64 data URIs per fare ciò. È possibile effettuare una richiesta AJAX per i dati e popolare l'URI di dati. Anche se questo sarebbe assolutamente sicuro, sarebbe anche potenzialmente inefficiente.

  2. È possibile use cookies controllare l'accesso. Poiché questi verranno inviati dal browser durante il recupero delle immagini.

  3. È possibile utilizzare un'implementazione personalizzata di URL sicuri e tokenizzati come https://host/secure_images/{tokenized_access_url}.jpg. Proprio come fa S3. Puoi persino far scadere questo gettone dopo un po '.

A seconda delle esigenze si possono trovare alcune di queste tecniche male la vostra capacità di sfruttare la cache. Ecco perché l'utilizzo di S3/Cloudfront può essere la scelta migliore in termini di sicurezza ed efficienza.

La cosa che dovresti anche chiedere è se queste risorse devono essere protette contro l'URL che è trapelato. Per molte situazioni, semplicemente mantenere l'URL del bene privato (usare un valore generato casualmente da qualche parte) e mostrarlo solo agli utenti che hanno accesso, è una soluzione sufficiente.