Не удалось запросить у сервера авторизации токен Firebase от внешнего интерфейса - PullRequest
0 голосов
/ 26 октября 2018

У меня есть приложение VueJS, которое позволяет пользователям входить в систему и просматривать привилегированные страницы с данными из базы данных Firebase в реальном времени.После того, как пользователь вошел в интерфейс через auth0 на localhost:8080, у меня возникли трудности с подключением к экспресс-серверу на localhost:8081 для пользовательских маркеров firebase.

Входы обрабатываются auth0.После вызова

auth.authorize({...}),

выполняется функция обратного вызова:

handleCallback() {
    auth.parseHash({ hash: window.location.hash }, (err, authResult) => {
        if (authResult && authResult.accessToken) {
            localStorage.setItem(ACCESS_TOKEN_KEY, authResult.accessToken);
            localStorage.setItem(ID_TOKEN_KEY, authResult.idToken);
            window.location.href = '/';
            this.getFirebaseToken(authResult);
        } else if (err) {
            console.warn(err);
        }
    });
},

Проверка токенов в jwt.io показывает, что токены доступа и id почти идентичны (заголовок,большинство полей полезной нагрузки), за исключением следующих различий в полезной нагрузке:

  1. "aud"

  2. Маркер доступа имеет поле "azp", идентификатор имеет "at_hash" и "nonce".

После этого я пытаюсь подключить пользователей к моему экспресс-серверу для получения собственного токена.

xhr запрос:

getFirebaseToken(resultObject) {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://localhost:8081/auth/firebase', true);
    xhr.setRequestHeader('Authorization', `Bearer ${resultObject.accessToken}`);
    xhr.onload = () => {
        console.log(JSON.parse(xhr.response));
    };
    xhr.send();
},

Код сервера:

app.get('/auth/firebase', jwtCheck, (req, res) => {
    const uid = req.user.sub;
    firebaseAdmin.auth().createCustomToken(uid)
    .then(customToken => {
        console.log(customToken);
        res.json({ firebaseToken: customToken });
    })
    .catch(err => {
        res.status(500).send({
            message: 'Something went wrong in acquiring a Firebase token',
            error: err,
        })
    })
});

На данный момент я не могу перейти к пользовательскому входу в firebase, поскольку получаю серию ошибок.

В интерфейсе, вкладка сетипоказывает, что этот запрос xhr имеет статус 'canceled'.В консоли также есть неперехваченная ошибка.

Узловой сервер сообщает «недопустимая аудитория jwt, ожидаемое http://localhost:8081/».

На панели мониторинга auth0 https://myapp.au.auth0.com, http://localhost:8080, http://localhost:8081 задаются как «Разрешенные веб-источники»и Allowed Origins (cors) для передней и задней части.

Предложения по отладке приветствуются.

РЕДАКТИРОВАТЬ: В Firefox есть несколько ошибок следующим образом:

1.

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://192.168.1.13:8080/sockjs-node/info?t=1540524441491. (Reason: CORS request did not succeed).[Learn More]

2.

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://myapp.au.auth0.com/userinfo. (Reason: CORS request did not succeed).[Learn More]
[Show/hide message details.] Error: app.js line 3245 > eval:127:19

3.

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8081/auth/firebase. (Reason: CORS request did not succeed).[Learn More]
...