Heroku H18 ошибка с Microsoft OAuth 2.0 - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь создать простой поток аутентификации OAuth 2.0 для Microsoft / outlook ID. Я проверил поток на локальном хосте, кажется, все работает в этом.

Но когда я развертываю приложение в Heroku с новыми учетными данными приложения Microsoft и RedirectURI приложения Heroku. При перенаправлении на страницу входа в систему выдает ошибку H18.

Я могу получить код в URL, ID_token и токен обновления.

Полезная информация:

  • Среда разработки: Nodejs

  • библиотеки: simple-oauth2, express, express-session.

Журналы Heroku

sock = backend at = код ошибки = H18 desc = "Запрос сервера прерван" метод = GET path = "/ auth / outlook / callback? Code = ### - ### - ### - ### - ### "host = ####. herokuapp.com request_id = ... fwd =" ##. ##. ##. ## "dyno = web.1 connect = 1ms service = 646ms status = 503 bytes = протокол = HTTPS

Код для перенаправления Uri

app.get('/auth/outlook/callback', async (req, res) => {
            const code = req.query.code;
            const options = {
              code,
              redirect_uri: redirectUri,
              scope : scopes.join(' ')
            };

        try {
            const result = await oauth2.authorizationCode.getToken(options);

            console.log('The resulting token: ', result);

            var token = oauth2.accessToken.create({ refresh_token: result.refresh_token, expires_in: 0});



              email = authHelper.getEmailFromIdToken(result.id_token);

              User.findOne({emailId:email})
                .then((existingUser) => {
                  if(existingUser){
                    //We already have a new user
                  }else {
                    new User({emailId : email}).save();
                  }
                });

              req.session.access_token = token;
              req.session.refresh_token = token.refresh_token;
              req.session.email = email;

              console.log(token);

        // Check if the token is expired. If expired it is refreshed.

                if (token.expired()) {
                  try {
                    token =  token.refresh();
                  } catch (error) {
                    console.log('Error refreshing access token: ', error.message);
                  }
                }

              return res.status(200).json().redirect('/logincomplete');

            } catch(error) {
              console.error('Access Token Error', error.message);
              return res.status(500).json('Authentication failed');
            }
          });

Значения токена, электронной почты и других переменных корректно устанавливаются этим кодом.

Пожалуйста, дайте предложения о том, как решить эту проблему.

Также, если вы можете предложить пакет с паспортной стратегией для работы с этим материалом вместо simple-oauth2. Я пробовал использовать паспорт-прогноз и паспорт-Microsoft.

Заранее спасибо.

...