angular-jwt 如何在没有秘密的情况下解码我的 JWT?
How is angular-jwt decoding my JWT without a secret?
Auth0 团队创建了一个名为 "angular-jwt" 的东西,它有一个 jwtHelper class。这个东西在没有我在服务器上使用的秘密的情况下成功解码了本地 JWT。这怎么发生的?如果它们不安全,那么对 sign/encrypt 它们使用秘密有什么意义?
服务器上加密令牌的函数(使用"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);
});
下面是完整示例的 link:http://github.com/auth0/ang...
JWT 使用编码,而不是加密。令牌包含的数据不是秘密,任何人都可以对其进行解码和查看。服务器的作用是使用秘密(在您的情况下为config.secret
)对令牌进行签名,这实际上使得在不知道秘密的情况下无法修改令牌。因此,只有服务器能够更改令牌的内容,但任何人都可以读取它。
Auth0 团队创建了一个名为 "angular-jwt" 的东西,它有一个 jwtHelper class。这个东西在没有我在服务器上使用的秘密的情况下成功解码了本地 JWT。这怎么发生的?如果它们不安全,那么对 sign/encrypt 它们使用秘密有什么意义?
服务器上加密令牌的函数(使用"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);
});
下面是完整示例的 link:http://github.com/auth0/ang...
JWT 使用编码,而不是加密。令牌包含的数据不是秘密,任何人都可以对其进行解码和查看。服务器的作用是使用秘密(在您的情况下为config.secret
)对令牌进行签名,这实际上使得在不知道秘密的情况下无法修改令牌。因此,只有服务器能够更改令牌的内容,但任何人都可以读取它。