¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo solucionar el Error 401 (Error de Preflight CORS) al enviar credenciales desde código en un servidor SAP

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 39 Vistas
0
Cargando...

0

down vote

favorite

Tengo un servidor SAP y un Javascript que llama a servicios web a SAP. Hasta ahora, estaba llamando a los servicios web de SAP a través de CORS/JSONP y ambos funcionaban, donde obtendría un cuadro de diálogo de usuario y contraseña y llenaría el usuario y la contraseña y las cosas funcionarían.

Sin embargo, necesitaba enviar el usuario y la contraseña desde el código y cuando hago request.setHeader('Authorization', 'Basic' +btoa(username:password)), envía una Solicitud de Preflight OPTIONS y recibo un Error 401 (Error de Preflight CORS).

Por favor, encuentra el código adjunto

function submitCRM() {

var url = "https://xxxx:8400/sap/bc/rest_crm/zvertex_adr_cor?country=US&street=&city=tallmadge&state=oh&zipcode=44278";

var credentials = 'username:password';

var getJSON = function (url) {

return new Promise(function (resolve, reject) {

var xhr = new XMLHttpRequest();

console.log(window.location);

console.log(window.location.origin);

xhr.open('GET', url, true);

xhr.responseType = 'application/json';

xhr.setRequestHeader('Authorization', 'Basic ' + btoa(credentials));

xhr.withCredentials = true;

xhr.onload = function () {

var status = xhr.status;

if (status == 200) {

resolve(xhr.response);

} else {

reject(status);

}

};

xhr.send();

});

};

getJSON(url).then(function (data) {

console.log(data);

});

}

En el lado del servidor, he agregado los siguientes parámetros:

server->response->set_header_field( name = 'Access-Control-Allow-Methods' value = 'GET,HEAD,OPTIONS,POST,PUT' ).

server->response->set_header_field( name = 'Cache-Control'

value = 'no-cache, no-store' ).

server->response->set_header_field( name = 'Pragma'

value = 'no-cache' ).

server->response->set_header_field( name = 'Access-Control-Allow-Origin'

value = ' https://localhost:44300 ' ).

server->response->set_header_field( name = 'Access-Control-Allow-Credentials'

value = 'true' ).

server->response->set_header_field( name = 'Access-Control-Allow-Headers'

value = 'Authorization,X-ACCESS_TOKEN,Access-Control-Allow-Headers,Origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers' ).

server->response->set_content_type( 'application/json' ).


Ahora, si elimino la declaración xhr.setRequestHeader(Authorization), funciona con un cuadro de diálogo para usuario y contraseña

¡Por favor, ayuda por favor!!!!!!!!!!!!!!

Miembro anterior

Gracias
Sahil

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola Jun,
¿Por proxy te refieres a configurar el Despachador Web correctamente?

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¿Usar proxy, está bien?...

No te esfuerces....

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Jun,
Gracias por el enlace. Se especifica que tenemos que usar un proxy inverso para que funcione. Me preguntaba si había alguna otra forma de superarlo.

¿Te has encontrado antes con el problema de la solicitud de Preflight OPTIONS?
Mi problema es que cada vez que se llama a un servicio web, aparece una ventana emergente del navegador pidiendo credenciales. Si intento suprimir eso, entonces obtengo un Error de Preflight OPTIONS de CORS.

Puedes probarlo cuando tengas tiempo y déjame saber.

Gracias
Sahil

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?