У меня есть приложение с бэкэндом узла (экспресс) и клиентом vue.Я пытаюсь добавить SAML SSO, используя паспорт.(имеет смысл сделать это в приложении узла сервера).
отлично работает при использовании в экспресс-приложении.но когда я применил его к структуре экспресс-бэкэнда и vue-клиента - он не может выполнить перенаправление на Idp.
, когда пользователь заходит на мою страницу входа, vue client (Login.vue) вызывает бэкэнд-узел для проверкиПользователь.(api verifyuser)
вызов узла passport.authenticate ('saml', ...), и я ожидал ответа, который я могу отправить обратно в функцию vue, которая вызвала меня, и там, в Login.vue - длясделать перенаправление.
но возникает проблема: в приложении внутреннего узла ответ на перенаправление отправляется после того, как мой код выполнен, внутри стратегии паспорта.Поэтому он автоматически отправляется в браузер, а не возвращается к сценарию vue, который вызвал этот узел api.
Таким образом, перенаправление выполняется в фоновом режиме, пользователь не видит никакого перенаправления.исходная страница входа по-прежнему отображается.И моя функция vue получает ответ от API - только после того, как браузер отправляет перенаправление (в фоновом режиме) в IDP и получает ответ html-страницы входа в систему от IDP.Таким образом, данные, которые я получаю - это html-страница входа в систему IDP, а не данные перенаправления.
Как я могу это решить?
Я новичок в клиентских технологиях и JS ивключая узел, так что я действительно не знаю, как обрабатывать такой поток.поиск 3 дня для решения.
Большое спасибо за вашу помощь!
вот мои фрагменты кода:
Login.vue:
<input class="button wide cropBottom io-mango ae-5 margin-top-0 toRight" v-on:click="userLogin" type="button" value="Log In"/>
...
userLogin: function() {
...
...
$(".overlay").show();
this.$http.post(process.env.BASE_URL + "verifyuser", oUser) //call backend node express app
.then(function(data) {
...
here I gets only an html login page which the IDP sent as a response to the redirect with the SAML Request.
}
Экспресс-приложение внутреннего узла:
verifyuser.js:
module.exports = function (app) {
app.post('/verifyuser', (req, res, next) => {
var SamlStrategy = passportSaml.Strategy;
passport.use(new SamlStrategy(
{ ...
});
passport.authenticate('saml', {session: false}, function (err, user, info) {
...
})(req,res,next);
//tried to get the redirect here, but res still don't have it. only after this function is called, the SAML request is created from the req, and the location url is made.
});