Как выполнить единый вход в другой домен с помощью экспресс-сервера / клиента реакции и перенаправить в другой домен? - PullRequest
1 голос
/ 29 октября 2019

Проблема заключается в создании веб-приложения, которое имеет форму, которая отправляет его на мой express сервер, генерирует токен из сообщения внешней конечной точки со значением формы, использует токен из внешнего домена для отправки сообщения на внешнийконечная точка для проверки подлинности во внешнем домене .

Я могу сгенерировать токен на моем экспресс-сервере, сделать второе сообщение с токеном для внешней конечной точки и войти в систему и увидеть ответ наЭкспресс-сервер.

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

Я попытался сделать 2-е сообщение от клиента с Axios и Fetchи затем перенаправить на внешний домен, но он выдаст мне ошибки CORS, пока я не включу плагин CORS chrome, но он все равно выдаст мне то же сообщение об истечении времени ожидания.

Я пытался добавить разные заголовки в свой пост-вызовразрешить перенаправления, но безуспешно.

const router = require('express').Router();
const xml2js = require('xml2js');
const parseString = require('xml2js').parseString;
const request2 = require('request');
// const axios = require('axios')
var setCookie = require('set-cookie-parser')
var Cookies = require('js-cookie')
require('dotenv').config();

router.post('/sso', (req, response, next)=>{

  // SETTING UP XML BODY FOR TOKEN GENERATOR

  // USING TEMPLATE TO BUILD XML BODY FOR TOKEN GENERATOR

  // SETTING UP POST TO TOKEN GENERATOR WITH XML TEMPLATE

  // DECLARING TOKEN TO PASS TO SSO POST

  // PROMISE FOR RESPONSE POST TO TOKEN GENERATOR
  return new Promise((resolve)=>{

    // ERROR CATCH BLOCK FOR POST TO TOKEN GENERATOR
    try {

      // POST TO TOKEN GENERATOR USING XML TEMPLATE
      request2(TokenGenerator,
        (err, res, body)=>{
          // PARSE TOKEN GENERATOR BODY RESPONSE

              // CONVERTING TO STRING SOAP BODY

              // PARSING STRING INTO JSON TO TARGET TOKEN

              // DECLARING TOKEN RESPONSE IN RES WITH TOKEN VALUE FROM POST TO TOKEN GENERATOR

              // ASSIGNING IT TO GLOBAL VARIABLE

            })

          // TRYING POST FROM CLIENT HAS BEEN COMMENTED OUT
          // // response.send(token)
          // // next()

          // SETTING UP POST TO PARTICIPANT SSO WITH TOKEN VALUE
          const secondPostToSSO = {
            method: 'POST',
            url: 'externaldomain.com/sso.aspx',
            followAllRedirects: true,
            jar: true,
            headers: {
              'Content-Type': 'text/html'
            },
            form: {
              'TOKEN': token
            }
          }

          // POST TO PARTICIPANT SSO WITH TOKEN
          request2.post(secondPostToSSO,(err, response2, body2)=>{
               console.log(response2.request)

               var cookies = setCookie.parse(response2, {
                 decodeValues: true,
                 map: true
               })

               console.log(cookies)      




               next()
             })

          })

    } catch (e) {
      console.error(`[FATAL ERROR] - KAPUT - ${e}`)
      return res.redirect('/')
    }

  })

})

module.exports = router

Я ожидаю, что вывод сообщения сервера перенаправит клиента на сервер externaldomain.com, где я получаю токен и делаю пост с токеном для аутентификации клиента. В результате клиент войдет из моего веб-приложения во внешний домен.

...