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