7

CONTESTO:Token di autenticazione Ember.js per Ember-Data + AMS => JSON o HTTP Header?

Ho un'applicazione Ember.js 1.1.0-beta.1 che scambia i dati JSON con un server Rails-API (Rails 4). Lo scambio di dati JSON è realizzato con Ember-Data 1.0.0-beta.2 e Active Model Serializers 0.8.1 (AMS). Sto utilizzando le configurazioni predefinite consigliate sia per Ember-Data che per AMS e sono conforme alle specifiche API JSON.

In ogni chiamata RESTful, il client passa il token di autenticazione corrente al server. Il token di autenticazione è verificato e ritirato e un nuovo token di autenticazione viene generato e inviato al client. Pertanto, ogni chiamata RESTful accetta un token di autenticazione nella richiesta e fornisce un nuovo token di autenticazione nella risposta che il client può memorizzare nella cache e utilizzare per la prossima chiamata RESTful.

DOMANDA:

Dove metto il token di autenticazione in ogni richiesta e di risposta?

Dovrebbe essere parte del JSON di ciascun oggetto in richiesta e risposta? In tal caso, dove si trova il token inserito nella struttura JSON dell'oggetto esistente (che non ha nulla a che fare con l'autenticazione)?

Oppure devono essere inseriti nell'intestazione HTTP per ogni oggetto di richiesta e risposta?

Che cos'è la "Via delle Braci" che si potrebbe aspettare di trovare nel nuovo ricettario delle guide di Ember?

più contesto:

Sono già familiarità con i seguenti link:

... e sono alla ricerca di risposte che vadano oltre queste e siano specifiche per Ember-Data + AMS.

Con l'eccezione della necessità di passare un nuovo token al client nella risposta via Ember-Data, assumere il mio codice cliente è altrimenti simile all'esempio @machty Embercast su GitHub: https://github.com/embercasts/authentication-part-2/blob/master/public/js/app.js

Grazie molto!

risposta

2

Ho creato qualcosa di simile, anche se non resetto il token a meno che l'utente non si disconnetta.

Non lo inserirò nel corpo della richiesta stessa: stai solo andando a inquinare i tuoi modelli. Probabilmente non esiste un modo Ember poiché questo è più un problema di trasporto. Trasmetto il token utilizzando un'intestazione HTTP personalizzata e/o un cookie. Il cookie è necessario per autorizzare il download di file, che non può essere eseguito tramite ajax, sebbene il cookie funzioni anche per le chiamate ajax. Nel tuo caso, utilizzerei un cookie e il server lo imposterebbe sul nuovo valore ogni volta. Tuttavia, lo schema di reimpostazione del token su ogni richiesta JSON non funzionerà su richieste simultanee. E 'davvero necessario? Se usi TLS probabilmente non dovrai preoccuparti così tanto. È inoltre possibile sospendere il token in modo che, se non vengono richieste per 10 minuti, viene generato un nuovo token.

3

Ho uno stack simile: ember, ember-data e rails-api con AMS. In questo momento sto solo passando il token di autenticazione (che memorizzo in localStorage) in un'intestazione (sebbene tu possa passarlo sulla stringa di query) modificando il metodo ajax di RESTAdapter.

Il mio primo pensiero sarebbe di evitare di reimpostare il token su ogni richiesta. Se si è particolarmente preoccupati del fatto che il token venga sniffato, potrebbe essere più semplice reimpostare il token sul server a intervalli regolari (ad esempio, 10 minuti). Quindi, se una richiesta da parte del client non riesce a causa di un vecchio token, è sufficiente recuperare il nuovo token (passando un token 'reset' che il server ti fornisce all'accesso) e ripetere la richiesta iniziale.

Per quanto riguarda dove posizionare il token, non c'è davvero una "Via di Brace" - preferisco passarlo in un'intestazione dato che passarlo nella stringa di query può rovinare con la cache ed è anche più probabile che venga registrato da qualche parte lungo la strada. Eviterei sicuramente di trasmetterlo nel corpo della richiesta, che andrebbe contro ciò che i dati dell'ember si aspettano, immagino.

Problemi correlati