Salesforce + JS + localhost = FUCK CORS!

bLaKnI

Buen dia.

¿Alguien?

Me he pateado internet. Pero es literalmente imposible.

Con un scriptillo JS desde mi maquina, no hay huevos de explotar la API de SF y obtener token.
Ya he leído todo, ya he configurado todo en SF en CORS y demás, me he mirado la via de oauth via connected apps, nada.
No hay huevos. Desde casa no hay manera.

Estoy pendiente de que en un eCommerce que te deja crear "paginas estaticas" rollo wordpress, al que puedes editar el codigo como HTML basico y te permite poner <script> o <style>, pueda meter ahí la logica en JS de conexión, y añadiendo el dominio del eCommerce en SF CORS, funcione la obtención de token (bearer)...

Pero desde casa, directo desde chrome ejecutando el JS, nada. Por mas que añado localhost en CORS. Y leyendo docs, entiendo parece decir que la via de obtención de token por grant_type=password, no tiene permisividad CORS en el endpoint.

En fin, este thread es por si alguna buena alma se ha topado con dicha mierda y puede arrojar luz.
Con lo puto fácil que es trabajar desde Python macho...

Thnks.

Ranthas

Si tu petición está siendo bloqueda por CORS, suele ser cosa del servidor, no del cliente. Si te está bloqueando la obtención del token de OAuth, debes comprobar antes que nada estas dos cosas:

Primero: que tu petición para obtener el token, contiene la siguiente cabecera:

Origin: url_del_dominio_que_solicita_el_recurso

Segundo: que el servidor incluye en su respuesta la siguiente cabecera:

Access-Control-Allow-Origin: url_del_dominio_al_que_se_le_permite_solicitar_el_recurso

Como te digo, suele ser en el 99% de las ocasiones el servidor el que rechaza peticiones debido a CORS, y no cosa del cliente.

Échale un ojo y nos cuentas.

JuAn4k4

Cors lo bloquea el navegador, usa postman/curl y santas pascuas, le pones el origin que te piden y a correr. A no ser que tengan csrf palante

1 respuesta
bLaKnI

Con Python requests lo hago sin problemas.
Postman no usa CORS porque resuelve con servidor. Por eso se lo traga.
Tengo una class hecha en Python pequeñita que va de muerte para Salesforce. La he replicado en JS y la lanzo desde el browser y nada, no conecta.

Se supone que cuando meta el codigo en un servidor y whitlistee el dominio en SF CORS, se acabará el problema. Pero desde casa, nada de nada.

De todos modos, si puedes #3, amplia un poco el tema. A ver si pudiera dar con un "workarround".


Mira, ni habia hecho la prueba con POSTMAN porque directamente lo había leído por inet.
Acabo de hacerla, y fucking surprise:

Same shit!

Entiendo que podría ahora añadir en CORS setup en Salesforce el dominio de Postman, y probar si funciona.
Y en caso afirmativo, replicar en todas mis requests los headers de POSTMAN como origin. Esto comentas, verdad?

Le haríamos creer a Salesforce que somos Postman... ¿si?

2 respuestas
r2d2rigo

#4 pero estas abriendo el .js a pelo con el navegador o lo estas sirviendo desde un servidor local como XAMPP?

1 respuesta
bLaKnI

#5 Respuesta corta: a pelo.
Respuesta """larga""", en realidad es un HTML, con el tipico <script> en el head, que tiene el codigo como tal. Y como lo lanzo desde PyCharm, se abre en el browser como http://localhost:XXXXX

MTX_Anubis

#4 El problema que tienes con Postman es que lo estás usando desde la web y te lo está bloqueando, como es obvio. Te pone bien claro que uses el cliente de escritorio.

Por otro lado, tu mismo has dicho esto:

Y leyendo docs, entiendo parece decir que la via de obtención de token por grant_type=password, no tiene permisividad CORS en el endpoint.

y si buscas
https://developer.salesforce.com/forums/?id=9060G000000XfhRQAS

Y parece que sigue igual y no me extraña porque estarías exponiendo los secrets de login en tu cliente.

No sé qué maś quieres. El login no permite CORS así que no hay forma de solucionarlo, el server jamás va a enviar los headers necesarios. Está pensado para que lo hagas desde el backend y desde ahí le devuelvas el token al cliente (o lo uses en tu propio backend) y hagas las peticiones con él.

1 respuesta
bLaKnI

#7 Eso es. Y punto. Pero debía explotar todas las posibilidades antes de dar esta misma respuesta a la empresa. Que ni entienden que cojones les estoy diciendo, y parece que lo único que sucede, es que "no se hacerlo". En fin...

Usuarios habituales

  • bLaKnI
  • MTX_Anubis
  • r2d2rigo
  • JuAn4k4
  • Ranthas