Подтвердить что ты не робот

Passportjs Facebook вход потока (паспорт-facebook против паспорт-токена)

Работа с Node, Express и Passport.

Хорошо, поэтому мы с моей командой создаем REST API для двухстороннего приложения типа рынка. Мы уже создали базовую локальную стратегию для входа в систему электронной почты и пароля.

Мы хотим сделать агентом API-интерфейс API агентом, поэтому мы можем использовать API через Интернет, Android или iOS.

Но где нас путают с потоком входа FB. Вопрос в том, что именно происходит за кулисами в Passportjs. Мы рассмотрели стратегии "паспорт-фейсбук" и "паспорт-facebook-токен" и не можем решить, с кем идти.

Это мое текущее понимание потока:

Passport-token

Passport-facebook

Если это правильно, мне лучше, если бы клиент получил access_token из FB, а затем отправил его мне или просто позволил FB обработать его через перенаправления и URL-адрес обратного вызова?

Паспорт-маркер:

passport.use('facebook-token', new FacebookTokenStrategy( {
    clientID: 'xxx',
    clientSecret: 'xxx'
}, function(accessToken, refreshToken, profile, done) {
    // asynchronous
    //console.log("into passport auth");
    process.nextTick(function() {
        User.findOne({'facebook.id': profile.id}, function(error, user) {
            console.log("user is " + JSON.stringify(user));
            console.log("profile is " + JSON.stringify(profile));

            //do user creation stuff etc.

            return done(error, user);
        });
    });
}));

authRouter.post('/facebook', passport.authenticate('facebook-token'), function (req, res) {
    console.log("into controller");
    if (req.user){
        //log the user in since they successfully authenticated with facebook.
        req.login(user);
        res.status(200).end();
    } else {
        res.status(401).end();
    }
});

Паспорт-facebook:

passport.use('facebook', new FacebookStrategy( {
    callbackURL: "http://75.128.65.176:8080/auth/facebook/callback",
    clientID: 'xxx',
    clientSecret: 'xxx'
}, function(accessToken, refreshToken, profile, done) {
    // asynchronous
    //console.log("into passport auth");
    process.nextTick(function() {
        User.findOne({'facebook.id': profile.id}, function(error, user) {
            console.log("user is " + JSON.stringify(user));
            console.log("profile is " + JSON.stringify(profile));

            //do user creation stuff etc.

            return done(error, user);
        });
    });
}));

// Redirect the user to Facebook for authentication.  When complete,
// Facebook will redirect the user back to the application at
//     /auth/facebook/callback
authRouter.get('/facebook', passport.authenticate('facebook'));

// Facebook will redirect the user to this URL after approval.  Finish the
// authentication process by attempting to obtain an access token.  If
// access was granted, the user will be logged in.  Otherwise,
// authentication has failed.
authRouter.get('/facebook/callback',
    passport.authenticate('facebook', { successRedirect: '/',
                                  failureRedirect: '/login' }));

Любые детали/подробности о том, как этот поток действительно работает, будут НАСТОЯТЕЛЬНО оценены!

4b9b3361

Ответ 1

Клиентские переадресации Facebook неудобны при использовании родных iOS и Android Facebook SDK - поскольку они иногда перенаправляют на установленное пользователем приложение Facebook. Следовательно, если вам нужен действительно общий API, тогда вы должны пойти с passport-facebook-token.

Ответ 2

Проверьте правильность показанных 2 потоков.

Да, они верны.


Q: У меня есть список API. Как я могу защитить их с помощью стратегии паспорт-facebook

У вас есть параметры сервера:

1. Подтвердите Facebook token

  • Сервер возвращает Facebook token вместе с информацией пользователя
  • Клиент отправляет Facebook token каждый раз, когда он вызывает API
  • Сервер проверяет Facebook token

Подробнее о том, как проверить Facebook token здесь.

2. Использование JSON Web Token (JWT)

  • Сервер возвращает JWT после возврата информации пользователя Facebook.
  • Клиент отправляет JWT каждый раз, когда он вызывает API
  • Сервер проверяет JWT

Таким образом, сервер не должен отправлять запрос на Facebook для проверки Facebook token. Подробнее здесь.


В: Если я использую паспорт-facebook-токен, как я могу сказать пользователю перейти и войти на facebook

Ваш /api/auth/facebook принимает только Facebook token и возвращает соответствующий HTTP code. Таким образом, просить пользователя пойти и войти в Facebook - это работа клиента.

Подробнее о том, как создать учетную запись Facebook вручную здесь.