2015-12-26 10 views
7

Ich versuche zu verstehen, wie ich ein benutzerdefiniertes JWT-Routing in Loopbacks Sicherheitsmodell anpassen kann. Meine Anwendung hat eine Authentifizierung "Tanz" mit SMS, die zu einem gültigen JWT-Token mit der excellent description führt. Ich benutze die jsonwebtoken und Dinge funktionieren wie erwartet. Nach Erhalt des Tokens sendet mein angular.js-Client das Token mit jeder Anfrage im Header Authorisation: JWT ..token.. (gefunden widersprüchliche Dokumentation, man sagt JWT, ein Träger, aber ich kann das herausfinden).Verwenden von JWT für Loopback-Authentifizierung

Jetzt möchte ich das Token in einer Loopback-Anwendung verwenden. Ich würde gerne die ACL-System-Loopback bietet. Ich habe die folgenden Ressourcen lesen:

Und ich bin nicht klar, was meine nächsten Schritte sind. Ich habe Arbeit:

  • Benutzer 'login' - ein JWT
  • Benutzeranmeldung mit Benutzername/Passwort zu erzeugen (im Ruhestand werden)
  • Arbeits ACL-Implementierung in Loopback (wenn ich ein ACL-geschützte Ressource zuzugreifen ich ?, wie ein 4xx Fehler erwartet)
  • Mein JWT Token richtig() im Header der Anforderung

ich brauche:

  • basierend auf der JWT-Token eine gültige Benutzer mit Rollen kompatibel ACL

Hilfe Loopback ist sehr viel

geschätzt
+0

Haben Sie jemals herausgefunden? – denislexic

+1

Danke für die Erinnerung. Ja, habe ich. Antworten Sie unter – stwissel

Antwort

3

Die Lösung viel einfacher zu sein, stellte sich heraus, dass ich, obwohl es wäre. Für Anfänger verwendet Loopback seine eigenen JWT-Webtoken, um eine (statuslose) Benutzersitzung zu führen. Nach dem Erstellen der Identität (in meinem Fall das Extrahieren der Handynummer aus meinem JWT-Token) muss ich nur das Mitglied suchen und das native JWT-Loopback-Token generieren. Mein Endpunkt Definition war:

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 
    } 

); 

und die provideSMSToken Funktion wie folgt aus:

// 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); 
      }) 
     } 
     }); 
    } 
    } 

Arbeiten wie ein Charme

+0

Ich benutze Loopback, aber es verwendet nicht JWT und ich habe versucht, sie zu implementieren. Musstest du etwas konfigurieren oder nutzt es JWT aus der Box? – fmtoffolo

+0

Loopback-Authentifizierungstoken sind JWT. – stwissel

+0

Loopbacks oder Gateway? Weil meine DB Tokens speichert und sie nicht die normale jwt-Struktur haben. – fmtoffolo