2015-12-26 25 views
7

Sto cercando di capire come posso adattare un routing JWT personalizzato al modello di sicurezza di loopback. La mia applicazione ha un "ballo" di autenticazione che coinvolge SMS che risulta in un token JWT valido utilizzando lo excellent description. Sto usando il jsonwebtoken e le cose funzionano come previsto. Dopo aver ottenuto il token, il mio client angular.js invia il token con ogni richiesta nell'intestazione Authorisation: JWT ..token.. (documentazione in conflitto trovata, uno dice JWT, un Bearer, ma posso capirlo).Utilizzo di JWT per l'autenticazione loopback

Ora voglio utilizzare il token all'interno di un'applicazione di loopback. Mi piacerebbe utilizzare il sistema ACL fornito da loopback. Ho letto le seguenti risorse:

E non sono chiaro quali sono i miei prossimi passi. Ho lavorare:

  • utente 'login' - generare una JWT
  • Login utente utilizzando username/password (da pensione)
  • di lavoro ACL implementazione in loopback (quando accedo un ACL protetto risorsa ottengo ?, come previsto un errore 4xx)
  • mio JWT Token correttamente() nell'intestazione della richiesta

ho bisogno:

  • in base alla JWT una pedina di un utente valido con ruoli compatibili per loopback ACL

Aiuto è molto apprezzato

+0

Hai mai questo numero? – denislexic

+1

Thx per avermi ricordato. Si l'ho fatto. Risposta sotto – stwissel

risposta

3

La soluzione si è rivelata molto più semplice che ho pensato che sarebbe stato. Per i principianti, loopback utilizza i propri webwind jwt per mantenere una sessione utente (stateless). Dopo aver stabilito l'identità (nel mio caso estrarre il numero di cellulare dal mio token JWT) ho solo bisogno di cercare il membro e generare il token JWT nativo loopback. La mia definizione endpoint è stato questo:

Member.remoteMethod(
    'provideSMSToken', { 
     accepts: [{ 
     arg: 'mobilenumber', 
     type: 'string', 
     description: 'Phone number including +65 and no spaces' 
     }, { 
     arg: 'token', 
     type: 'string', 
     description: 'the token received through SMS' 
     }], 
     returns: { 
     arg: 'token', 
     type: 'string' 
     }, 
     description: 'provide SMS token to confirm login', 
     http: { 
     path: '/smsauthenticate', 
     verb: 'post' 
     }, 
     isStatic: true 
    } 

); 

e la funzione provideSMSToken così:

// Exchange the SMS Token with a login token 
    Member.provideSMSToken = function(mobilenumber, token, cb) { 
    var app = Member.app; 
    // CHeck if the token does exist for the given phone number 
    // if yes, check for the respective memeber 

    if (!app.smsVerificationToken || !app.smsVerificationToken[mobilenumber] || app.smsVerificationToken[mobilenumber] !== token) { 
     var wrongToken = new Error("Wrong or missing token"); 
     cb(wrongToken, "Wrong or missing token"); 
    } else { 
     var timetolive = 86400; 
     Member.lookupByPhone(mobilenumber, function(err, theOne) { 
     if (err) { 
      cb(err, "Sorry, no such member here!"); 
     } else { 
      // We can provide a token now for authentication 
      // using the default createAccessToken method 
      theOne.createAccessToken(timetolive, function(err, accesstoken) { 
      cb(err, accesstoken); 
      }) 
     } 
     }); 
    } 
    } 

funziona come un fascino

+0

Sto usando loopback ma non sta usando JWT e ho cercato di implementarli. Hai dovuto configurare qualcosa o utilizza JWT out of the box? – fmtoffolo

+0

I token di autenticazione loopback sono JWT. – stwissel

+0

Loopback o gateway? Perché il mio db sta memorizzando i token e non hanno la normale struttura jwt. – fmtoffolo