Articles of express jwt

超级testing,testing安全的REST API

我正在编写由jwt保护的REST API的集成testing。 一个API操作POST /user/token返回一个给定username和password的jwt ,然后使用该令牌来执行一系列操作,例如: GET /user/:id 在路由使用jwt({secret: secret.secretToken}) ,令牌包含在http头Authorization 。 当使用超级testing进行testing时,我可以进行嵌套testing,但是我想先获取令牌,然后将此令牌用于其他操作testing。 POST /user/token => 12345 GET /user/:id, `Authorization Bearer 12345` GET /user/:foo, `Authorization Bearer 12345` 如何避免为每个操作testing(见下文)生成一个新的标记,但只使用一个由POST / user / token生成的标记。 it('should get a valid token for user: user1', function(done) { request(url) .post('/user/token') .send({ _id: user1._id, password: user1.password }) .expect(200) // created .end(function(err, res) { […]

Json Web令牌不会过期

我刚刚实现了一个json Web令牌authentication,在我的后端我发送由jsonwebtoken创build的jsonwebtoken给客户端如下: var token = jwt.sign(user, secret.secretToken, { expiresInMinutes: 1 }); return res.json({ token: token }); 而在客户端,我只是将这个令牌存储到SessionStorage中。 事情是令牌不会在一分钟后过期,我错过了什么? 编辑:我实现了这个post中显示的相同的东西。

使用angular和express-jwt实现刷新令牌

我想使用angular,nodejs和express-jwt来实现带有json web令牌的Sliding过期概念。 我对如何做到这一点感到有些困惑,并且正在努力寻找更新令牌或与这些技术/框架相关的其他材料的任何示例。 我正在考虑的几个选项是 在初始login后,为每个请求生成一个新的令牌 跟踪服务器端发出的令牌 但是我真的不确定,请帮忙

节点js,JWT令牌和逻辑背后

我正在使用JWT来保护节点js https://github.com/auth0/express–jwt 要创build一个JWT令牌用户会话,我只需要: -> auth/signup -> jwt.sign(user_profile,secret,expireInMinutes:{900000000 /*almost never expires*/}); 或者在login电话的情况下 -> auth/login -> jwt.sign(user_profile,secret,expireInMinutes:{900000000 /*almost never expires*/}); 每次调用受保护的url时,我都会检查由JWT中间件自动设置的req.user 。 现在我想知道: 1 – 调用sign()时,JWT标记存储在哪里? 2 – 我必须validation()令牌每次被保护的url被称为? 如果是,为什么? 3 – 当我为已经签名的用户设置一个新的令牌时,旧的令牌(如果存在)被删除? 如果到期没有设立,或者是5年如果呢? 4 – 为什么我不能在同一个浏览器/应用程序页面上设置新的令牌? 我得到无效的签名错误,如果我注册一个新的令牌,但令牌匹配(我检查)这就像我不能在同一浏览器上签署超过1个用户

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 = […]

Facebook与智威汤逊护照

我一直在我的服务器上使用Passport进行用户authentication。 当用户在本地login(使用用户名和密码)时,服务器发送一个存储在本地存储中的JWT,并在需要用户authentication的每个api调用中发送回服务器。 现在我想支持Facebook和Googlelogin 。 自从我开始使用Passport以来,我认为最好是继续使用Passport策略,使用passport-facebook和passport-google-oauth 。 我会提到Facebook,但是这两种策略都是一样的。 他们都需要redirect到服务器路由( '/ auth / facebook'和'/ auth / facebook / callback' )。 这个过程是成功的保存用户,包括他们的Facebook的\谷歌ID和令牌的数据库。 在服务器上创build用户时,会创build一个JWT(不需要依赖从facebook \ google收到的令牌)。 … // Passport facebook startegy var newUser = new User(); newUser.facebook = {}; newUser.facebook.id = profile.id; newUser.facebook.token = token; // token received from facebook newUser.facebook.name = profile.displayName; newUser.save(function(err) { if (err) throw err; […]

护照令牌authentication*无*数据库会话

我正在寻找一种方法来使用Passport.js的Twitter策略,而不使用数据库中的会话集合/表。 原因是我们将会话集合中的所有数据都保存得很大,每当用户发出请求时我们都会保存数据库往返,因为我们不必每次都去DB去获取会话数据。 无论如何,我们应该能够使用令牌(JSON Web令牌)来validation用户,这篇文章如何描述: https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens 但是我很困惑,为什么没有一个简单的方法来做这个护照? (这篇文章没有护照什么都可以做 – 但是Passport已经包括了这个?)。 也许我正在推翻这一点,而这样做只是为了省略我在Express中使用DB会话的呼叫,然后Passport已经足够聪明来处理JWT了? 不知何故,我怀疑这一点。 例如,在我的Express服务器中注释掉这些代码当然是不够的。 //app.use(expressSession({ // secret: 'arrete_x_paulette', // store: new MongoStore({mongooseConnection: mongoose.connection}), // saveUninitialized: true, // resave: true, // cookie: { // secure: false, // maxage: 6000000 // }, // proxy: false //})); 和 //app.use(passport.session()); 那么使用护照就足够了? 为什么有人会使用基于JWT的身份validation来使用存储在数据库中的会话?