Configure CORS / xmlhttprequest para permitir el acceso entre sitios a datos protegidos por nombre de usuario / contraseña

Tengo 2 sitios web. Estoy buscando permitir que una página web de un sitio web acceda a los datos de otro sitio web y la muestre. Para mayor claridad, me referiré al sitio web que accede a los datos como el sitio web del cliente (myclientsite.com) y al sitio web que contiene los datos como el sitio web del servidor (myserversite.com). El sitio del servidor está protegido por nombre de usuario / contraseña. El código en el sitio del cliente puede iniciar sesión correctamente en el sitio del servidor, pero los bashs posteriores para acceder a los datos necesarios provocan este error:

XMLHttpRequest no puede cargar https://myserversite.com/mydata . Un comodín ‘*’ no se puede usar en el encabezado ‘Access-Control-Allow-Origin’ cuando el indicador de credenciales es verdadero. Por lo tanto, no se permite el acceso al origen ” https://myclientsite.com “. El modo de credenciales de un XMLHttpRequest está controlado por el atributo withCredentials.

El sitio web del servidor se implementa con Node.js / Express. El acceso a los datos en el sitio web del servidor está protegido por pasaporte utilizando la estrategia de nombre de usuario / contraseña. El sitio web del servidor también está ejecutando cors para permitir el acceso entre sitios.

cors se configura utilizando las siguientes opciones:

var corsOptions = { origin: 'https://myclientsite.com', methods: 'GET,PUT,POST', credentials: true }; 

Como puede ver, no estoy usando un comodín ‘*’ para el origen, por lo que el resultado es confuso

El sitio web del cliente es un sitio web estándar que ejecuta nginx / wordpress. La página web que estoy usando para acceder al sitio del servidor contiene el siguiente HTML / Javascript:

 


var curReq; var jsDataTargetDiv = document.getElementById('jsDataTarget'); var jsLoginTargetDiv = document.getElementById('jsLoginTarget'); jsDataTargetDiv.innerHTML = 'Loading...'; jsLoginTargetDiv.innerHTML = 'Logging In...'; var render = function(data, numReqs){ // Render results from pulling web pages jsDataTargetDiv.innerHTML =data; } var login = function(data, numReqs){ // Render results from pulling web pages jsLoginTargetDiv.innerHTML =data; webReqs.addReq(render,'MyData','https://myserversite.com/mydata',''); } var webReqs = new cliMultiReq(); webReqs.addPost(login,'Login','https://myserversite.com/signin','username=myusername&password=mypassword');

Los métodos pertinentes de ClienMultReq.js son:

 cliMultiReq.prototype.addReq = function (rspFunc, label, url, params) { var myReq = this.numReqs++; this.rspFunc.push(rspFunc); this.rdy.push(false); this.data.push([]); this.label.push(label); this.passFunc.push(passFuncGenerator(myReq,this)); this.xmlHttpReq.push(new XMLHttpRequest); this.xmlHttpReq[myReq].addEventListener('load',this.passFunc[myReq]); this.xmlHttpReq[myReq].open('GET',url); this.xmlHttpReq[myReq].withCredentials = true; this.xmlHttpReq[myReq].send(); }; cliMultiReq.prototype.addPost = function (rspFunc, label, url, params) { var myReq = this.numReqs++; this.rspFunc.push(rspFunc); this.rdy.push(false); this.data.push([]); this.label.push(label); this.passFunc.push(passFuncGenerator(myReq,this)); this.xmlHttpReq.push(new XMLHttpRequest); this.xmlHttpReq[myReq].addEventListener('load',this.passFunc[myReq]); this.xmlHttpReq[myReq].addEventListener('error',this.passFunc[myReq]); this.xmlHttpReq[myReq].addEventListener('abort',this.passFunc[myReq]); this.xmlHttpReq[myReq].open('POST',url, true); this.xmlHttpReq[myReq].withCredentials = true; this.xmlHttpReq[myReq].setRequestHeader("Content-type", "application/x-www-form-urlencoded"); this.xmlHttpReq[myReq].send(params); }; 

Estoy extremadamente confundido donde radica el problema. Si configuro withCredentials en false para recuperar los datos, se llama a la función de callback sin error, pero el sitio del servidor devuelve un mensaje que dice que el acceso no está autenticado.