Node.js angular jwt如何在没有秘密的情况下解码我的jwt?

Node.js angular jwt如何在没有秘密的情况下解码我的jwt?,node.js,express,jwt,auth0,express-jwt,Node.js,Express,Jwt,Auth0,Express Jwt,Auth0团队创建了一个名为“angular jwt”的东西,它有一个jwtHelper类。这个东西在没有我在服务器上使用的秘密的情况下成功地解码了本地JWT。这是怎么发生的?如果它们不安全,那么使用秘密对它们进行签名/加密有什么意义 服务器上加密令牌的函数(使用“jsonwebtoken”): 来自客户端的代码: angular .module('sample.home', [ 'ui.router', 'angular-storage',

Auth0团队创建了一个名为“angular jwt”的东西,它有一个jwtHelper类。这个东西在没有我在服务器上使用的秘密的情况下成功地解码了本地JWT。这是怎么发生的?如果它们不安全,那么使用秘密对它们进行签名/加密有什么意义

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

来自客户端的代码:

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

    });

下面是完整示例的链接:

JWT使用编码,而不是加密。令牌包含的数据不是秘密,任何人都可以解码并查看。服务器所做的是,它使用一个秘密(在您的例子中是,
config.secret
)对令牌进行签名,这实际上使得在不知道秘密的情况下无法修改令牌。因此,只有服务器可以更改令牌的内容,但任何人都可以读取它。

aaaaah。。。他们签字了!我在想什么!?!?谢谢,Yuri。仅供参考,此答案仅适用于使用对称密钥(例如HMAC-SHA256)的情况。还可以使用非对称密钥(例如RSA-SHA256),它允许您使用私钥对令牌进行签名,并使用公钥对令牌进行验证。如果需要对客户端隐藏,也可以在令牌中使用加密声明,或者使用JWE对令牌进行完全加密:这让我的日子。。。非常感谢。
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);

    });