混合护照-facebook和护照-jwt的最佳方法是啥?
Posted
技术标签:
【中文标题】混合护照-facebook和护照-jwt的最佳方法是啥?【英文标题】:What's the best way to mix passport-facebook and passport-jwt?混合护照-facebook和护照-jwt的最佳方法是什么? 【发布时间】:2016-08-14 20:51:31 【问题描述】:我是 Node.js 开发的新手,目前在空闲时间从事一个宠物项目。
到目前为止,我已经使用 passport 和 passport-jwt 为该策略创建了 JWT 身份验证,并且我在所有 RESTful API 中都使用了它。
现在我正在考虑将其与某种 Facebook 身份验证混合使用,但仍想坚持使用令牌身份验证。
目前这是我生成和获取令牌的方式:
exports.authenticate = function(req, res)
User.findOne(
email: req.body.email
, function(err, user)
if (err)
return res.status(400).send(getErrorMessage(err));
if (!user)
res.status(400).send(
success: false,
message: 'Authentication failed. User not found.'
);
else
if (user.checkPassword(req.body.password))
let token = jwt.encode(user, config.secretPhrase);
res.json(
success: true,
token: 'JWT ' + token
);
else
res.status(401).send(
success: false,
message: 'Authentication failed. Wrong password.'
);
);
;
app.route('/api/users/authenticate')
.post(user.authenticate);
为了验证我执行以下操作:
let user = require('../../app/controllers/user-controller');
app.route('/api/todos')
.get(user.validateLogin, todos.list)
.post(user.validateLogin, todos.create);
用户控制器:
exports.validateLogin = passport.authenticate('jwt',
session: false
);
任何人都可以提出一个巧妙的方法来混合这两种策略?我应该使用express-jwt 吗? express-jwt 和 passport-jwt 有什么区别?
【问题讨论】:
【参考方案1】:您可以像使用 passport-jwt
一样使用 passport-facebook 和新策略,这样您就可以将 Facebook 用户令牌保存在数据库中并返回您的令牌
【讨论】:
这是最常用的方法。您可以为身份验证实施多种护照策略,并在成功时返回您的 jwt。将是一个新的身份验证路由,如果用户已经有一个帐户并使用 fb 登录,则在 DB 中查找电子邮件,如果存在则向您的用户发送 jwt。【参考方案2】:看起来您当前正在将令牌发回给最终用户。您如何保存客户端?我建议使用像 jsonwebtoken 这样的简单 JWT 库,并将令牌设置为 httpOnly cookie。如果您当前将其保存在 localStorage 中,您可能更容易受到 XSS 攻击。 以下是我当前如何处理设置和检查用户 JWT 的要点: https://gist.github.com/briancw/8c2021817c3bd34972e8e8deb6048a4f
【讨论】:
以上是关于混合护照-facebook和护照-jwt的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Passport & JWT & Google/Facebook 策略 - 如何结合 JWT 和 Google/Facebook 策略?
护照-facebook-token vs 护照-facebook