Sono nuovo per l'intero mondo SPA sul lato client. Sto usando le tecnologie di cui sopra, che sembrano abbastanza promettenti. Tuttavia, un enorme ostacolo che non riesco a superare facilmente è la mancanza di sicurezza integrata. Ho dovuto rilasciare manualmente l'autorizzazione dell'utente, che IMHO dovrebbe essere parte del framework.Hot Towel/Durandal/Breeze.js: come proteggere le chiamate dati in verticale?
Ora che l'ho ordinato, sto riscontrando grossi grattacapi con sicurezza verticale: dove un utente è loggato ma può accedere facilmente alle informazioni di altri utenti modificando alcuni parametri nella console del browser. Potrei passare l'ID utente con ogni chiamata e quindi confrontarlo con quello sul server, ma speravo che ci sarebbe stata una soluzione globale che non inquinava le chiamate dati di brezza con gli ID utente.
Per esempio, diciamo che c'è una chiamata dal servizio dati in questo modo:
function getItems(){
var query = breeze.EntityQuery.from('Items').expand("Person");
return manager.executeQuery(query);
}
In questo modo ottenere tutti gli elementi, non va bene. Quindi cerchiamo di limite per UserID:.
function getItems(userId){
var query = breeze.EntityQuery.from('Items').where("userId", "==", authentication.userId).expand("Person");
return manager.executeQuery(query);
}
nel secondo esempio, si ottiene l'ID utente del servizio di autenticazione, che memorizzato l'ID utente quando l'utente è stato registrato in Tuttavia, un utente malintenzionato può facilmente andare alla console browser e cambia quel valore.
Ovviamente, potrei passare l'ID utente usando con Parametri (...) e confrontarlo con quello corrente sul server, ma dovrei farlo per ogni chiamata, che non sembra corretta. C'è un modo migliore per proteggere le chiamate con l'ID utente fidato?
Ciao Ward, grazie per la tua risposta. Sì, ho finito per fare qualcosa di molto simile a quello che hai menzionato (meno il repository per ora), quindi tutte le chiamate sono rivolte all'utente sul lato server. Continuate così :) –
Il link nella domanda non sembra funzionare. Sembra che ci sia ancora un campione a eliminazione diretta, ma non riesco a vedere la roba Auth @Ward. https://github.com/Breeze/breeze.js.samples/tree/master/net – philreed