Sto costruendo un'app angolare con un backend sails.js. Ho incorporato questa autenticazione JWT nell'app.
https://github.com/Foxandxss/sails-angular-jwt-exampleAutenticazione JWT in angolare - Livelli multipli di autenticazione
sto ancora esplorando esattamente come le opere di autenticazione e attualmente sto cercando di capire come aggiungere più livelli di autorizzazione. Viene fornito preconfigurato con 0 e 1 e voglio aggiungere un livello di amministrazione sopra quello.
Gestisce i livelli di autorizzazione esistenti come segue: A ogni percorso viene assegnato un livello di autorizzazione, tramite una costante. Così tutte le rotte di utenti ottengono questa proprietà di accesso assegnato alla proprietà data in stato di:
$stateProvider
.state('user', {
abstract: true,
template: '<ui-view/>',
data: {
access: AccessLevels.user
}
})
L'AccessLevels.user è tirato da una costante coppia chiave-valore:
angular.module('app')
.constant('AccessLevels', {
anon: 0,
user: 1
});
Ogni volta che un calcolo del percorso avviene a, controlla la proprietà data.access per vedere qual è il livello di accesso per quella particolare rotta. Se ritorna come una route che richiede l'autenticazione, controlla localStorage per un token. Se c'è un token, il percorso procede, altrimenti ti si avvia.
Ecco la funzione che viene chiamato stateChangeStart:
authorize: function(access) { //<- 'access' will be whatever is in the data property for that state
if (access === AccessLevels.user) {
return this.isAuthenticated(); // <- this just grabs the token
} else {
return true;
}
}
Allora, qual è il modo più semplice per aggiungere un ulteriore livello?
Ovviamente ho bisogno di inserire il valore auth_level nel modello utente. Ma allora cosa? Quale sarebbe il modo migliore per aggiungere questa funzionalità e mantenere l'integrità dell'autenticazione esistente (sono preoccupato per la sicurezza)?
Quindi vedo che il controller di autorizzazione lato server, in caso di login riuscito, restituisce l'oggetto utente e una coppia chiave-valore token. Il token contiene il valore del metodo sign, con un payload di '{sid: user.id}'. Stai dicendo che posso cambiarlo in '{sid: user.id, auth_level: user.auth_level}'? – tpie
Sì. Le affermazioni di un JWT sono fondamentalmente una mappa e JWT definisce alcune coppie chiave/valore specifiche (iss, sub, aud, exp, nbf, iat, jti) ma consente anche di aggiungere altre dichiarazioni definite dal produttore/consumatore. La maggior parte delle librerie supporta anche l'aggiunta di attestazioni arbitrarie e, con JavaScript, le attestazioni sono di solito una mappa che puoi semplicemente aggiungere e assegnare valori. –