Я сделал 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:
Если это уместно, клиент в этом случае является расширение 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 и сделать запрос через Почтальон, я получаю тот же результат: он работает на локальном и не работать над реальным доменом.
Что еще нужно сделать для аутентификации пользователей в моем домене?
Вы пытались добавить путь к разделу «Авторизованные перенаправления URI»? Если сервер узла выполняет аутентификацию, вам необходимо настроить его, поскольку он выполняет аутентификацию, а не браузер. – ldg
Клиент в этом случае является расширением Chrome, поэтому он не может выполнять перенаправления. Токен поступает от зарегистрированного пользователя, используя [getAuthToken] (https://developer.chrome.com/apps/app_identity), так что Google выполняет проверку подлинности –