Tag: jwt

节点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个用户

如何纯粹使用Cognito来authentication用户使用S3

我已经阅读了这篇文章和AWS回复如何在API中使用Cognito标记? 这一个如何使用AWSauthentication与自定义身份validation创build临时S3上传安全令牌 我还不清楚是否有一个简单的解决scheme来保护S3访问。 我有一个移动客户端和一个node.js后端。 客户端使用后端进行身份validation,并接收一个jwt accesstoken,以便进一步调用我的后端。 除了与我自己的后端进行通信之外,用户还应该能够从S3上传和下载文件。 我正在寻找最简单的解决scheme,以确保只有具有有效accesstoken我的后端用户可以上传到S3。 我可以做以下(这是基于这个博客文章http://blog.backspace.academy/2015/03/using-cognito-with-nodejs-part-2.html ): 客户端使用我的自定义node.js后端进行身份validation,并从后端接收自定义accesstoken 我的node.js后端获取CognitoID AWS临时用户凭证。 然而,AWS的文档说,我们还需要一个会话令牌(大概是通过调用CognitoSync),所以我假设我的退缩需要获得会话令牌。 我的node.js后端将这些临时凭证和会话令牌传递给客户端 客户端使用它们通过AWS SDK传递凭证+会话令牌来调用S3。 我错过了什么吗? 有一个更简单的方法来做到这一点? 我假设没有办法简单地让客户机将自己的自定义node.js用户accesstoken传递给AWS / S3 / Cognito,并让S3 / Cognito通过调用我自己的可以validation此令牌的node.js API来validation该令牌。

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

Node.js – Express.js JWT在浏览器响应中总是返回一个无效的令牌错误

我用express-jwt模块使用了node.js和express.js,并且设置了一个简单的HTTP服务器来testing一切: 这是涉及的节点代码: app.set('port', process.env.PORT || 3000); app.use(express.methodOverride()); app.use(allow_cross_domain); app.use('/api', expressJwt({secret: '09qrjjwef923jnrge$5ndjwk'})); app.use(express.json()); app.use(express.urlencoded()); app.use('/', express.static(__dirname + '/')); app.use(function(err, req, res, next){ if (err.constructor.name === 'UnauthorizedError') { res.send(401, 'Unauthorized'); } }); app.get('login',function(req,res){ //… jwt.sign(results.username+results.email, secret, { expiresInMinutes: 9000000000*9393939393393939393939 }); }); app.post('api/profile',function(req,res){ console.log(req.user); // this return undefined in console res.send(req.user); // response is pending and dunno why […]

护照令牌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来使用存储在数据库中的会话?

智威汤逊前端和后端令牌战略

我在一个nodejs服务器中编写一个前端应用程序在emberjs和后端/服务器端。 我有emberjsconfiguration,以便用户可以login/注册与第三方Oauth(谷歌,微博,Facebook)。 我有一个后端编写在承载RESTful API的express nodejs服务器上。 我没有DB连接到emberjs,我不认为我应该反正,因为它是严格的客户端代码。 我打算使用JWT进行客户端和服务器端之间的通信。 当用户使用他们的oauth信誉login时,我从提供者的uid,name,login,access_token和其他细节中得到一个JSON对象。 我正在努力挑选如何处理用户注册的策略。 由于是OAuth,因此没有注册stream程。 所以stream程是如果用户不在我的分贝,创build它。 我不支持电子邮件/密码authentication。 用户首次使用OAuth提供商login时会有什么stream量? 应该emberjs发送所有的细节到每个login后端,以便后端可以添加新的用户到数据库? 什么应该是我的JWT机构的一部分? 我在想用户和供应商提供的访问令牌。 我能想到的一个问题是提供者特定的访问令牌可以改变。 用户可以从供应商的网站撤消令牌,并用emberjs再次注册。 我打开写在任何其他JavaScript客户端框架的前端,如果它变得更容易。

在Rest API中使用Facebook维护Express和NodeJS中的JWT的密钥和访问令牌

我有两个应用程序: 服务器(REST API服务器) 节点js performance jsonwebtokens 表示,智威汤逊 mongoose 客户端(Portable Front-end) 引导 Angular JS 本地存储 angular的Facebook angularJWT 晚些时候,客户端应用程序将移植到Android,iPhone和其他平台使用phonegap。 对于OAuth,我使用Facebook作为提供者。 现在,我刚刚意识到JSON Web Tokens是这种设置的方式。 我的问题是一个体系结构,而不是语法 – 如何在nodejs中使用JWT签署Facebook访问令牌和用户ID时pipe理密钥? 所以这是如何在我的应用程序的stream程: Angular 客户端有一个loginbutton 用户单击button> Facebook身份validation启动 客户端收到user_id和FB访问令牌 客户端发送[ POST JSON主体 ] user_id和访问令牌到Node + Express服务器在' http://server.com/auth/login ' 节点服务器已经将express-jwt应用于除/ auth / login之外的所有路由 var expressJwt = require('express-jwt'); var jwt = require('jsonwebtoken'); app.use(expressjwt({secret:''})。unless({path:['/ auth / login']})); […]

socket.io-client如何在连接时设置请求头

我试图设置一个HTTP头,当socket.io客户端发出连接请求。 有没有办法做到这一点? 这是我在做什么: // server side var io = socketio(server); io.use(function (socket, next) { // authorize using authorization header in socket.request.headers }); // client side var socket = io(); // i'm trying to set an authorization header in this http reqeust 有任何想法吗? 谢谢。

智威汤逊:什么是一个好的密钥,以及如何将它存储在Node.js / Express应用程序中?

首先,生成密钥的好方法是什么? 我应该用键盘上的许多随机键生成一个,但是必须有更好的解决scheme。 解释如何生成一个非常好的关键。 其次,什么是存储密钥的好方法? 我可以在我的应用程序configuration中编写密钥,但这意味着源代码的妥协将危及整个系统。 将密钥存储在Node.js Express应用程序中有什么好方法?

如何在JWT中使用jti声明

JWT规范提到了一个jti声明,据称这个声明可以作为随机数来防止重播攻击: JTI(JWT ID)声明为JWT提供了一个唯一的标识符。 标识符值必须以确保相同值被偶然分配给不同数据对象的可能性可以忽略的方式分配; 如果应用程序使用多个发行者,则必须防止不同发行者产生的值之间的冲突。 jti声明可用于防止重播JWT。 jti值是区分大小写的string。 使用这个声明是可选的。 我的问题是如何去执行这个? 我是否需要存储以前使用的jtis,并在每次请求时发布新的JWT? 如果是这样,这是否不符合智威汤逊的目的? 为什么使用JWT而不是将随机生成的会话ID存储在数据库中? 我的REST API有一个mongo数据库,我不反对增加一个redis实例。 有比JWT更好的身份validation选项吗? 我主要是不想在客户端存储消除HTTPauthentication的密码作为一个选项,但是,当我深入到这个JWT的东西,我开始感觉,如果自定义令牌实施或不同的标准可能会更好满足我的需求。 是否有任何节点/快递包基于令牌的authentication,支持令牌吊销和旋转令牌? 将不胜感激任何意见。