Я пытаюсь создать простой поток аутентификации OAuth 2.0 для Microsoft / outlook ID. Я проверил поток на локальном хосте, кажется, все работает в этом.
Но когда я развертываю приложение в Heroku с новыми учетными данными приложения Microsoft и RedirectURI приложения Heroku. При перенаправлении на страницу входа в систему выдает ошибку H18.
Я могу получить код в URL, ID_token и токен обновления.
Полезная информация:
Журналы 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.
Заранее спасибо.