2015-08-11 41 views
9

Zespół Auth0 stworzył coś, co nazywa się "angular-jwt" i ma klasę jwtHelper. To coś skutecznie dekoduje lokalny JWT bez tajemnicy, której użyłem na serwerze. Jak to się stało? Jeśli nie są bezpieczne, jaki jest sens używania tajnego klucza do podpisywania/szyfrowania?W jaki sposób kątowe-jwt dekoduje moje JWT bez tajemnicy?

funkcji na serwerze, który szyfruje token (używając "jsonwebtoken"):

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

Kod z klientem:

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

    }); 

Oto link do pełnej przykład: http://github.com/auth0/ang...

Odpowiedz

11

JWT używa kodowania, a nie szyfrowania. Dane zawarte w tokenie nie są tajne, każdy może je odkodować i wyświetlić. Co robi serwer, to oznacza token za pomocą tajnego klucza (w twoim przypadku, config.secret), który skutecznie uniemożliwia modyfikowanie tokena bez znajomości sekretu. W związku z tym tylko serwer będzie mógł zmienić zawartość tokena, ale każdy może go odczytać.

+1

Aaaah ... są podpisane! Co ja sobie myślałem!?!? Dzięki, Yuri. –

+1

Dla odniesienia, ta odpowiedź dotyczy tylko przy użyciu kluczy symetrycznych (np. HMAC-SHA256). Możliwe jest również użycie kluczy asymetrycznych (np. RSA-SHA256), co pozwala podpisywać tokeny za pomocą klucza prywatnego i sprawdzać je za pomocą klucza publicznego. Możliwe jest również posiadanie zaszyfrowanych roszczeń w tokenie, jeśli trzeba je ukryć przed klientem lub w pełni zaszyfrowane tokeny za pomocą JWE: https://tools.ietf.org/html/draft-ietf-jose-json- web-encryption-40 –

+0

To sprawiło, że mój dzień ... Dziękuję – SoliQuiD