Articles of passport.js

如何安全地使用Passport与Node.js和MongoDB?

所以我得到了Passport与Node.js和MongoDB的会话pipe理,这当然方便地提供访问请求头中的user对象。 但是,至less对我而言,Passport将这个对象设置为MongoDB的整个帐户文档。 对于我创build的模式,这包括用户的一切 – 电子邮件,名称,哈希和盐渍密码等。所以我有两个关于这个问题。 首先,在服务器和客户端之间来回发送所有这些信息是否真的很安全? 当然,它是通过SSL发送的,密码被哈希和腌制,但所有的用户信息仍然在那里。 我的模式需求用户信息(不需要身份validation的个人信息)保存在不同的MongoDB文档中? 即使我这样做,哈希密码仍然会来回传递。 是否假设SSL防止数据被窃听? 这似乎是假设某人假设已经把所有发送到我的应用程序的头文件都吸走了,他们可以重新创build用户数据库并执行彩虹表攻击。 其次,在服务器端,我(天真的)一直在使用请求标头用户名元素( req.user.username )来确定哪个用户被连接和authentication。 但是,似乎如果用户只是将其标题更改为不同的用户名,我的代码将允许他们伪装成不同的用户。 那么我应该通过其他方式来validation请求的身份,而不是仅仅使用纯文本的用户名呢? 还是我完全不知道如何存储,生成和传递这些头,这实际上不是一个安全问题? 如果是这样的话 – 有人可以详细介绍一下如何从Passport中创build这些头文件吗?

Passport.socketio发现会话有问题

我试图从套接字访问会话,但似乎无法build立连接。 没有失败,授权失败,我得到失败callback与以下消息: failed connection to socket.io: No session found 我将把所有的代码放在这里,这样可以更容易地发现我做错了什么。 var express = require('express'); var app = express(); var http = require('http'); var socketio = require('socket.io') var passportSocketIo = require('passport.socketio'); var port = process.env.PORT || 3000; var mongoose = require('mongoose'); var passport = require('passport'); var flash = require('connect-flash'); var morgan = require('morgan'); var cookieParser = […]

通过令牌validation,然后通过会话,如果令牌失败,使用护照?

我正致力于将现有的Web应用程序与NodeJS + Express后端适配到PhoneGap / Steroids应用程序。 当前Web应用程序的身份validation由Passport( http://passportjs.org/ )使用会话进行处理。 app.use( passport.initialize() ); app.use( passport.session() ); 在浏览器中很好用。 不幸的是,会话cookie在PhoneGap中不起作用。 所以发送到服务器的请求只会被拒绝。 PhoneGap的推荐解决scheme是使用令牌策略,而每个向服务器的请求中都包含一个唯一令牌,就像一个API端点一样。 所以,这是我想知道的: 是否有可能适应passport.session(),所以如果没有会话cookie被发现,它会改为检查一个req.token和授权反对呢? 我注意到已经有一些基于令牌的Passport策略可用。 (例如https://www.npmjs.org/package/passport-http-bearer )然而,所有这些策略似乎都假设会话将不会被使用,并被closures。 我真正需要的是使用两者,所以如果一个身份validation失败(例如会话),它可以通过并检查另一个身份validation(令牌)。 有没有人按照这个方法实现了一些东西? 任何build议/指针,将不胜感激。

快递/注册500与护照的未知错误

我有一个nodeJS应用程序使用快递和护照。 我试图处理login后的护照发送请求。 我的服务器控制台中得到一个未知的错误:POST /注册500 第一个问题,我该如何debugging呢? 有什么方法可以让我得到更多关于为什么500'的信息? 第二个问题,任何想法,为什么它不快速浏览我下面的内容。 我知道它不是所有的代码,但也许有一些明显的..? app.js: .. var passport = require('passport'); require('./config/passport')(passport); .. var routes = require('./routes/index')(app, passport); .. Passport.js定义了我对用户和数据库的处理。 它定义了一个称为local-signup的localStragery。 /routes/index.js: module.exports = function(app, passport) { .. var express = require('express'); var router = express.Router(); .. router.post('/signup', passport.authenticate('local-signup', { successRedirect : '/profile', failureRedirect : '/signup' }) ); .. return router } […]

没有使用不同的端口号,Socket.io不支持Express 4

我的应用程序工作时,我指定一个端口号到socket.io是不同的服务器端口号。 工作代码如下: 这是我的app.js文件: var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var mongoose = require('mongoose'); var configDB = require('./config/database.js'); var session = require('express-session'); var passport = require('passport'); var routes = require('./routes/index'); var auth = require('./routes/auth.js'); var app = express(); […]

Node Express – req.cookies和req.session.cookie之间的区别

我试图找出req.cookies和req.session.cookie之间的区别。 我正在使用Passport在Node.js Express中进行身份validation。 如果我在我的代码中logging这两行: console.log('cookies',req.cookies); console.log('session',req.session); 我得到这个输出: cookies { 'mysite.sid.uid.whatever': 's:Ltko5IdDgsAISG0smrKNYaeIVy8nbBzF.MkGmpnf6uUKITIAgN4ws3YXqxJrMaeeSCzlKdjQnqfI' } session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true, secure: false }, views: 8, passport: {} } 我正在使用这个configuration: app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); app.use(busboyBodyParser()); //app.use(busboy()); app.use(cookieParser('cookie parser secret')); app.use(session({ secret: process.env["SESSION_SECRET"], saveUninitialized: true, // (default: true) resave: true, // (default: true) store: require('mongoose-session')(mongoose), […]

Passport-Facebook令牌不断返回401

目前,我正在为我的iOS应用程序使用带有Express和Passport-facebook-token模块的NodeJS。 我遇到了麻烦,因为即使我们正在通过OAuth逻辑,服务总是返回401响应。 这个代码的任何想法,为什么它保持返回401,即使它成功validation,并来到我们的handleAuthentiation方法,但没有达到我有console.log("THIS IS NOT BEING CALLED")被调用console.log("THIS IS NOT BEING CALLED")调用? var http = require("http"); var express = require("express"); var bodyParser = require('body-parser'); var database = require('./database.js'); var passport = require('passport'), FacebookTokenStrategy = require('passport-facebook-token').Strategy; var User = require('./User.js'); var app = express(); //setup json parsing app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); //setup facebook authentication passport.use(new FacebookTokenStrategy({ clientID: "2454efafd33r", […]

Stormpath Express Passport保存customData或甚至默认数据

我正在运行Stormpath Express Passport的示例应用程序https://github.com/stormpath/stormpath-passport-express-sample 我无法围绕如何发布表单并保存customData或者甚至默认的数据,如给定的名字和姓氏。 总的来说,我会appeciate,如果我可以得到一个HTML(翡翠或EJS)的例子,我需要在app.js或index.js写的行。 4个晚上我一直在努力。 我已经尝试了多个Express,Stormpath的教程,但是没有一个是用来处理这个示例应用程序的。 我总是不得不安装多个新模块,但即使这样也没有任何工作。 我非常感谢Stormpath的人或者任何有经验的人能够帮助我解决我的问题,也许还会在网站上更新他们的教程,因为有些人似乎已经过时了。

自定义callbackpassportjs?

我有一个订购表单,用户需要先注册才能订购,所以我可以创build一个账户,然后像这样处理订单。 router.post('/project/new', passport.authenticate('local-signup'), function(req, res) { gateway.customer.find(req.user.id, function(err, customer) { if(customer) { // method for a customer inside the vault } else { // add a non existing customer to vault } }); }); 问题是如果某人已经login并且想要下订单。 我需要检查他们是否login,如果他们然后我可以继续订单,如果他们不是那么我需要authentication,然后login。 所以这样的事情对我来说是有意义的。 //prefer this!! router.post('/project/new', function(req, res) { if(req.user) { // do stuff for existing logged in user } else […]

Auth / Session不能在带护照的Sails中的一个页面上工作

我已经使用护照来pipe理Sails中的身份validation。 这是工作栏一个奇怪的问题。 如果我检查用户以修改导航栏 <ul class="nav navbar-nav navbar-right"> {{#if user}} <li>{{ user.username }}</li> <li><a href="/logout">Logout</a></li> User! {{else}} <li><a href="/login">Login</a></li> {{/if}} </ul> login并进入/这里什么也没有。 当我去/login或/注销,这两个使用相同的模板,并分享上面的代码,我遇到了两个条件。 有任何想法吗?