¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como resolver o Erro 401 (Erro de Preflight CORS) ao enviar credenciais do código em um servidor SAP

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

0

down vote

favorite

Tenho um servidor SAP e um JavaScript que chama serviços web no SAP. Até agora, estava chamando os serviços web do SAP via CORS/JSONP e ambos funcionavam, onde eu receberia uma caixa de diálogo de usuário e senha e preencheria o usuário e a senha e as coisas funcionariam.

No entanto, precisei enviar o usuário e a senha a partir do código e quando faço request.setHeader('Authorization', 'Basic' +btoa(username:password)), ele envia uma Solicitação de Preflight OPTIONS e recebo um Erro 401 (Erro de Preflight CORS).

Por favor, encontre o código anexado

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);

});

}

No lado do servidor, adicionei os seguintes 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' ).


Agora, se eu remover a declaração xhr.setRequestHeader(Authorization), funciona com uma caixa de diálogo para usuário e senha

Por favor, ajude por favor!!!!!!!!!!!!!!

Membro anterior

Obrigado
Sahil

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

4 Respuestas

0
Cargando...

Olá Jun,
Você se refere a configurar o Despachador Web corretamente por proxy?

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

Usar proxy é seguro?

Não se preocupe.

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

Olá Jun,
Obrigado pelo link. É especificado que precisamos usar um proxy reverso para funcionar. Eu estava me perguntando se há alguma outra maneira de contornar isso.

Você já teve problemas com a solicitação Preflight OPTIONS antes?
Meu problema é que toda vez que chamo um serviço da web, uma janela pop-up do navegador pede credenciais. Se eu tentar suprimir isso, então recebo um Erro de Preflight OPTIONS do CORS.

Você pode tentar quando tiver tempo e me avise.

Obrigado
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?