快速最佳实践,用于存储访问令牌

时间:2019-11-10 19:22:41

标签: node.js facebook express passport.js passport-facebook

我正在开发一个应用程序,该应用程序使用通行证-facebook进行身份验证并为用户创建访问令牌,然后该应用程序可以使用此令牌进行API调用。没有帐户创建或数据库,只有提供令牌的Facebook登录名。

我遇到的问题是如何处理此令牌。令牌的有效期很短,我不确定最好的做法是管理令牌/在到期后生成新令牌。

到目前为止,我仅尝试将令牌存储为cookie。在考虑安全性的同时,是否还有更好的管理令牌的做法?

如果有什么用,这就是我到目前为止所拥有的:

server.js

...

app.get('/auth/facebook', passport.authenticate('facebook'));

app.get(
 '/auth/facebook/callback',
 passport.authenticate('facebook', { failureRedirect: '/error' }),
 function(req, res) {
   res
     .cookie('token', req.user.token, {
       expires: new Date(Date.now() + 9999999),
       secure: true,
       httpOnly: true
     })
     .send('success');
 }
);

passport.js

module.exports = function(passport) {
  passport.use(
    new FacebookStrategy(
      {
        clientID: facebookID,
        clientSecret: facebookSecret,
        callbackURL: '/auth/facebook/callback'
      },
      function(accessToken, refreshToken, profile, done) {
        var user = {
          id: profile.id,
          token: accessToken
        };
        return done(null, user);
      }
    )
  );

  passport.serializeUser(function(user, done) {
    done(null, {
      token: user['token']
    });
  });

然后我像这样使用令牌:

user.js

router.get('/', async (req, res) => {
  graph.get(
    '/me?fields=id,name,email,birthday,posts.limit(5)',
    { access_token: req.cookies['token'] },
    function(err, data) {
      res.json(data);
    }
  );
});

0 个答案:

没有答案