Express Best Practice для хранения токена доступа - PullRequest
0 голосов
/ 10 ноября 2019

Я разрабатываю приложение, которое использует passport-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);
    }
  );
});
...