如何使用快递服务器/反应客户端在另一个域中进行SSO并重定向到另一个域?

问题描述 投票:1回答:1

问题是创建一个Web应用程序,该应用程序具有将其发送到我的express服务器的表单,从具有表单值的外部端点帖子生成令牌,使用来自外部域的令牌向外部端点发布帖子,然后获取已认证进入外部域

我能够在我的快递服务器上生成令牌,使用令牌向外部端点发第二篇文章,并且能够登录并查看快递服务器上的响应。

但是,当我尝试将我的客户端重定向到外部域时,它显示超时消息。

[我曾尝试使用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,并使用令牌进行发布以对客户端进行身份验证。结果应该是客户端已从我的Web应用程序登录到外部域。

node.js reactjs express single-sign-on saml
1个回答
0
投票
几周前,我能够解决CORS问题并完成申请,我想分享我的答案。

我解决CORS问题的方法是删除React并在同一端口的服务器端使用简单的HTML客户端。我使用npm包corshttps://www.npmjs.com/package/cors)。我在server.js文件中添加了以下一行:app.use(cors());

© www.soinside.com 2019 - 2024. All rights reserved.