2016-09-11 4 views
1

Я сделал REST api с Express, который использует Passport и passport-google-token для аутентификации пользователей. Он работает так, как ожидалось, когда мой сервер работает на localhost, но он не работает в живой версии сервера. Все вызовы возвращают неавторизованный ответ 401.Google token auth с Экспресс и Паспорт не работает

Стратегия паспорт настроен так:

this.passport.use(new GoogleTokenStrategy({ 
    clientID: this.config.auth.googleAuth.clientId, 
    clientSecret: this.config.auth.googleAuth.clientSecret 
}, (accessToken, refreshToken, profile, done) => { 
    User.findOne({'google.id': profile.id}, (err, user) => { 
    if(err) return done(err); 
    if(user) return done(null, user); 

    var newUser = new User(); 

    newUser.save((err) => { 
     if (err) throw err; 
     return done(null, newUser); 
    }); 
    }) 
})); 

А вот пример конечной точки. Он возвращает ответ 401, когда я нажимаю на него действительным токеном доступа Google, но только в реальном домене - он работает на localhost.

app.get("/api/exists", passport.authenticate("google-token"), (req, res) => { 
    // stuff happens here 
}); 

Вот что мои документы выглядят как в менеджере API Google: Google API credentials

Если это уместно, клиент в этом случае является расширение Chrome, который получает маркеры с помощью getAuthToken. Код, который делает запросы от клиента выглядит следующим образом:

chrome.identity.getAuthToken({"interactive": true}, (token) => { 
    const bodyJson = body ? JSON.stringify(body) : null; 
    const headers = new Headers(); 
    headers.append("Access_token", token); 
    headers.append('Accept', 'application/json'); 
    headers.append('Content-Type', 'application/json'); 

    const request = new Request(url, { 
    headers: headers, 
    method: method, 
    body: bodyJson 
    }); 

    fetch(request); 
}); 

Но даже если я генерировать маркер из the Google oauth playground и сделать запрос через Почтальон, я получаю тот же результат: он работает на локальном и не работать над реальным доменом.

Что еще нужно сделать для аутентификации пользователей в моем домене?

+0

Вы пытались добавить путь к разделу «Авторизованные перенаправления URI»? Если сервер узла выполняет аутентификацию, вам необходимо настроить его, поскольку он выполняет аутентификацию, а не браузер. – ldg

+0

Клиент в этом случае является расширением Chrome, поэтому он не может выполнять перенаправления. Токен поступает от зарегистрированного пользователя, используя [getAuthToken] (https://developer.chrome.com/apps/app_identity), так что Google выполняет проверку подлинности –

ответ

1

Вопрос оказался у моего сервера Nginx. По умолчанию он вырезает заголовки, содержащие символ подчеркивания (например, access_token). Мне не приходило в голову, что проблема будет там, поэтому даже не упоминается в моем вопросе.

Docs about that are here. Вы можете изменить поведение, установив:

underscores_in_headers on 

 Смежные вопросы

  • Нет связанных вопросов^_^