2015-08-11 26 views
9

Il team Auth0 ha creato qualcosa chiamato "angular-jwt" che ha una classe jwtHelper. Questa cosa decodifica correttamente un JWT locale senza il segreto che ho usato sul server. Come è successo? Se non sono sicuri, allora qual è il punto di usare un segreto per firmarli/crittografarli?In che modo l'angolare-jwt decodifica il mio JWT senza un segreto?

funzione sul server che cripta il token (usando "jsonwebtoken"):

function createToken (user) { 
    return jwt.sign(_.omit(user, 'password'), config.secret, { expiresInMinutes: 60*5 }); 
} 

Codice da parte del cliente:

angular 
    .module('sample.home', [ 
     'ui.router', 
     'angular-storage', 
     'angular-jwt' 
    ]) 
    .config(function ($stateProvider) { 
     $stateProvider 
      .state('home', { 
       url: '/', 
       controller: 'HomeCtrl', 
       templateUrl: 'modules/home/home.html', 
       data: { requiresLogin: true } 
      }) 
    }) 
    .controller('HomeCtrl', function homeController ($scope, $http, store, jwtHelper) { 

     $scope.jwt = store.get('jwt'); 
     $scope.decodedJwt = $scope.jwt && jwtHelper.decodeToken($scope.jwt); 

    }); 

Ecco un link per l'esempio completo: http://github.com/auth0/ang...

risposta

11

Un JWT utilizza la codifica, non la crittografia. I dati contenuti nel token non sono segreti, chiunque può decodificarli e visualizzarli. Quello che fa il server è che firma il token usando un segreto (nel tuo caso, config.secret), che rende effettivamente impossibile modificare il token senza conoscere il segreto. Quindi, solo il server sarà in grado di modificare il contenuto del token, ma chiunque può leggerlo.

+1

Aaaah ... sono firmati! Cosa stavo pensando!?!? Grazie, Yuri. –

+1

Per riferimento, questa risposta si applica solo quando si utilizzano le chiavi simmetriche (ad esempio HMAC-SHA256). È anche possibile utilizzare chiavi asimmetriche (ad esempio RSA-SHA256), che consentono di firmare i token con la chiave privata e di convalidarli con la chiave pubblica. È anche possibile avere attestazioni crittografate in un token se devono essere nascoste dal client o avere token completamente crittografati utilizzando JWE: https://tools.ietf.org/html/draft-ietf-jose-json- web-encryption-40 –

+0

Questo ha reso la mia giornata ... Grazie – SoliQuiD