Tag: jwt

错误:401(未授权),Passport身份validation在节点中

Passport身份validation中间件在这里使用,从loginapi我有一个jwt令牌生成,它发送到API http:// localhost:3030 / home / in标题,但它的投掷 错误 angular.js:12587 POST http:// localhost:3030 / home / 401(未经授权)。 {“data”:“Unauthorized”,“status”:401,“config”:{“method”:“POST”,“transformRequest”:[null],“transformResponse”:[ null],“jsonpCallbackParam”:“callback”,“url”:“ http:// localhost:3030 / home / ”,“headers”:{“Accept”:“application / json,text / plain, / ”}} “状态文本”:“未授权”} route.js module.exports = function(app , passport){ app.use('/login',userCtrl); app.use('/register',registerCtrl); app.use('/home', passport.authenticate('jwt', { session: false }) , homerCtrl); }; passposrt.js var JwtStrategy = require('passport-jwt').Strategy, ExtractJwt = […]

如何使用passport-jwtvalidation路由?

我正在使用passport-jwt ,我的策略设置如下: let jwtOptions = {} jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken() jwtOptions.secretOrKey = process.env.SECRET var strategy = new JwtStrategy(jwtOptions, function (jwt_payload, next) { console.log('payload received', jwt_payload); // usually this would be a database call: var user = users[_.findIndex(users, { id: jwt_payload.id })]; if (user) { next(null, user); } else { next(null, false); } }) passport.use(strategy) 所以,当我POST到/login路线,我能够生成一个令牌: var […]

NodeJS – Socket.io只允许JWTvalidation的连接

我的代码很简单: /*global require module process console*/ /*eslint-disable*/ (function (require, process) { 'use strict'; var config = require('../config') , uuid = require('node-uuid') , crypto = require('crypto') , fs = require('fs') , port = parseInt(process.env.PORT || config.server.port, 10) , serverHandler = function (req, res) { res.writeHead(404); res.end(); } , httpUrl , io , server; // Create an […]

将护照openID-stategy与智威汤逊结合在一起

使用openID( passport-steam )尝试使用passport.js进行身份validation,然后使用令牌(JWT)而不是会话时,我遇到了问题。 我目前的代码如下所示: app.post('/auth/steam', passport.authenticate('steam')); app.get('/auth/steam/return', passport.authenticate('steam', { failureRedirect: '/', session: false }), function(req, res) { var token = jwt.encode({ useridentifier: req.user.identifier}, tokenSecret); res.redirect('/'); }); 但是,我遇到的问题是:我应该如何将令牌传回客户端? 由于这是一个从Steam网站回来后运行的GET请求,我不能用简单的答复 res.json(token) 就像我见过的人们和JWT一起使用本地策略一样。 我设法解决的唯一解决scheme就是使用包含令牌的会话(例如connect-flash),并在将其redirect到“/”后通过REST API与客户端进行通信,但是使用JWT是为了避免使用会话,不是吗?

使用Express JS检查API请求授权的更好方法

我有一个超级冗余的server.js文件,因为几乎所有属于REST API的方法都是这样开始的,因为我必须在API请求中检查客户端是否有权要求特定的事情。 var jwt = require('jsonwebtoken'); // … app.get('/getsomething', function(req, res) { "use strict"; var token = req.headers[tokenName]; if (token) { jwt.verify(token, app.get('some_secret'), { ignoreExpiration: false }, function(err, decoded) { if (err || typeof decoded === "undefined") { res.json({ status: 401, message: "unauthorized" }); } else { // actual code starts here… 什么是更好的方法?

unit testing中的护照JWT授权 – 套接字挂断

我有一个情绪化的时间试图testing受保护的路线,使用护照的智威汤逊策略,授权标题。 我试过axios,supertest,superagent和我得到同样的错误 – '套接字挂断': Error: socket hang up at createHangUpError (_http_client.js:253:15) at Socket.socketOnEnd (_http_client.js:345:23) at emitNone (events.js:91:20) at Socket.emit (events.js:185:7) at endReadableNT (_stream_readable.js:974:12) at _combinedTickCallback (internal/process/next_tick.js:74:11) at process._tickDomainCallback (internal/process/next_tick.js:122:9) code: 'ECONNRESET', response: undefined } 这在开发环境中完美地工作,这只发生在testing环境 – unit testing或开发指向testing数据库/用户。 我知道这个错误意味着连接被服务器崩溃或语法错误所closures,但是没有语法错误。 terminal不能通过护照authentication: passport.authenticate('jwt'… 为什么? 这怎么解决? 终点: router.route('/private') .get( passport.authenticate('jwt', { session: false }), (req, res, next) => […]

在哪里存储JWT客户端凭证授权

我有一个NodeJS快速应用程序,通过客户端凭据授权身份validation到身份validation服务器。 我收到的令牌用于从API加载数据。 在整个应用程序中存储令牌的最佳实践是什么? 请注意,JWT不是用户特定的,因为我的Express App是客户端。

JWT有效载荷中应该包含多less信息?

我正在使用Mean stack构build一个flashcard应用程序,并试图模仿本教程中的过程https://thinkster.io/mean-stack-tutorial#wiring-everything-up 。 当新用户注册时,我想将用户的信息返回给用户对象:正在研究的当前和最近的一组卡片,当前和最近的卡片正在研究等等。 我的问题是这些信息中有多less应该joinJWT有效负载? 在thinkster.io教程中,JWT的负载仅包含user_ID,用户名和到期date。 我担心,如果额外的信息不应该进入JWT,因为它会使JWT太大。 那么,我只是发送JWT和一个用户对象,这个用户对象是在用mongoose.save方法保存后返回的吗? 这个策略听起来像是匹配下面的引用: https://auth0.com/blog/2014/01/27/ten-things-you-should-know-about-tokens-and-cookies/#token-size 每当您发出API请求时,您都必须在授权标头中发送令牌。 根据您在该令牌中存储的信息量,可能会变大。 另一方面,会话cookie通常只是一个标识符(connect.sid,PHPSESSID等),而其余的内容则驻留在服务器上(如果在服务器上运行,只有一个服务器或数据库农场)。 现在,没有什么能阻止你用令牌实现类似的机制。 令牌将具有所需的基本信息,在服务器端,您可以使用每个API调用的更多数据来丰富它。 这与Cookie的function完全相同,不同之处在于您有额外的好处,现在这是一个有意识的决定,您拥有完全的控制权,并且是您的代码的一部分。 我试图从thinkster.io模仿/ register路由代码如下: router.post('/register', function(req, res, next){ if(!req.body.username || !req.body.password){ return res.status(400).json({message: 'Please fill out all fields'}); } var user = new User(); user.username = req.body.username; user.setPassword(req.body.password) user.save(function (err){ if(err){ return next(err); } return res.json({token: user.generateJWT()}) }); }); 我可以编辑底部的保存方法部分,看起来像这样: user.save(function […]

res.redirect时没有find授权令牌

我有两个应用程序,都在Nodejs上。 一个前端和另一个后端。 我的后端应用程序受到使用express-jwt和jsonwebtoken中间件的令牌访问的保护。 我的问题是:我正在从前端向后端传递标头上的令牌,后端接受请求并正确响应。 然后在前端我将响应redirect到特定的页面( res.redirect('/') ),在那一刻我得到错误UnauthorizedError:没有find授权令牌 我的前端请求: /* Authentication */ router.post('/', function(req, res, next) { // request login service request({ uri: env.getUrl() + "/user", method: 'POST', timeout: 10000, headers: { 'Authorization': 'Bearer '.concat(global.token) }, form: { login : req.body.login, pwd : req.body.pwd } }, function(error, response, body){ if(error) { logger.error(error); res.render("error", {message: "Error getting […]

JWT解码返回null

我是Node.js的新手,阅读Fabian Cook的Node.js Essentials。 在使用JWT进行身份validation时尝试代码时,我从jwt.decode(token)中获得了一个NULL,但是令牌可以由jwt.io上的Debugger进行parsing。 代码有什么问题? var Passport = require( 'passport' ); var LocalStrategy = require( 'passport-local' ).Strategy; var Express = require( 'express' ); var BodyParser = require( 'body-parser' ); var jwt = require( 'jsonwebtoken' ); var Crypto = require ( 'crypto' ); var users = { zack: { username: 'zack', password: '1234', id: 1, }, […]