问题是创建一个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应用程序登录到外部域。
我解决CORS问题的方法是删除React并在同一端口的服务器端使用简单的HTML客户端。我使用npm包cors
(https://www.npmjs.com/package/cors)。我在server.js
文件中添加了以下一行:app.use(cors());
。