angular-jwt如何解密我的JWT没有秘密?

Auth0团队创build了一个名为“angular-jwt”的jwtHelper类。 这件事成功解码本地JWT没有我在服务器上使用的秘密。 这怎么发生的? 如果他们不安全,那么使用秘密签名/encryption他们有什么意义?

encryption令牌的服务器上的函数(使用“jsonwebtoken”):

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

来自客户的代码:

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

以下是完整示例的链接: http://github.com/auth0/ang …

JWT使用编码而不是encryption。 令牌包含的数据不是秘密,任何人都可以对其进行解码和查看。 服务器做了什么,是使用秘密(在你的情况下, config.secret )签署令牌,这实际上使得不知道秘密的情况下修改令牌是不可能的。 因此,只有服务器才能够更改令牌的内容,但任何人都可以阅读。