Solución:
Escribí la mayor parte de simple-salesforce
(aunque no el organizationId
parte, ya que no tengo una cuenta en la lista blanca de IP para probar)
La versión estándar / vainilla / regular / el 99% de los usuarios debería usar es la simple username
, password
, security_token
método.
Entonces algo como esto
from simple_salesforce import Salesforce
sf = Salesforce(username="[email protected]", password='nickspassword', security_token='tokenemailedtonick')
Con mucho, la parte más confusa es la security_token
parte (y fue la parte con la que me enganché). Resulta que el token de seguridad se le envía por correo electrónico después de restablecer correctamente la contraseña. Entonces, si ingresa a su cuenta de Salesforce y restablece su contraseña, creo que terminará con un correo electrónico con el asunto salesforce.com security token confirmation
que contendrá un Security Token
en el correo electrónico. Esa es su security_token
.
Para ser honesto, el security_token
kwarg es más una conveniencia que cualquier otra cosa. En lo normal email
/password
/token
flujo en el que la mayoría de los usuarios confían en lo que realmente se envía es email
como inicio de sesión y {password}{security_token}
como contraseña. Creo que podrías concatenarte tú mismo y pasar en un email
y password
kwarg si lo desea, pero supuse que obligar a la gente a concatizar la contraseña y el token ellos mismos iría en contra de la simple
parte de simple-salesforce
Allí es una forma de iniciar sesión con simple-salesforce con solo un nombre de usuario y contraseña. No se requiere token de seguridad:
from simple_salesforce import Salesforce, SalesforceLogin
session_id, instance = SalesforceLogin(username="<user>", password='<pass>')
sf = Salesforce(instance=instance, session_id=session_id)
# Logged in! Now perform API actions, SOQL queries, etc.
sf.query_all('<soql>')
Explicación
Todos los ejemplos que utilizan simple-salesforce comienzan con una llamada al Salesforce
constructor para iniciar sesión. Este constructor acepta una ID de sesión existente o credenciales de autenticación para iniciar sesión y crear una nueva sesión. Al iniciar sesión, llama al nivel inferior SalesforceLogin
función para hacer el trabajo real, pero curiosamente SalesforceLogin
no impone las mismas restricciones en sus argumentos, emite la llamada SOAP correcta para iniciar sesión con solo un nombre de usuario y contraseña, sin requerir un token o ID de organización.
Usando este truco, llamamos SalesforceLogin
directamente, obtenga el nuevo ID de sesión, luego páselo directamente al Salesforce
constructor. A partir de ese momento, podemos realizar solicitudes de API autenticadas.
Nota
La versión de simple-salesforce en PyPI (es decir pip install simple-salesforce
) está muy desactualizado con el repositorio de GitHub de salesforce simple. La última versión admite parámetros de inicio de sesión adicionales como domain
para iniciar sesión con dominios personalizados. Para obtener la última versión, use
pip install --upgrade https://github.com/simple-salesforce/simple-salesforce/archive/master.zip
(La instalación de pip desde zip es más rápida que usar git+ssh://
o git+https://
, como se indica en esta respuesta).
Editar
¿Cómo me mostrará el restablecimiento de mi contraseña qué es el token?
Simplemente lo hará. Si el usuario alguna vez ha solicitado el token de seguridad (que se le envía por correo electrónico, por lo que debe tener acceso a la dirección de correo electrónico asociada con su usuario), cada restablecimiento de contraseña posterior resultará en la generación y envío de un nuevo token por correo electrónico. Además de eso, una vez que haya iniciado sesión en el sistema (a la versión web, no a través de API), tendrá la opción de restablecer su token (y nuevamente, esto le enviará un correo electrónico).
¡Es como si no hubieras leído ni probado nada de lo que hemos escrito!
Buscando una respuesta basada en fuentes confiables y / u oficiales.
https://help.salesforce.com/htviewhelpdoc?id=user_security_token.htm
https://help.salesforce.com/HTViewSolution?id=000004502
https://help.salesforce.com/HTViewSolution?id=000003783
Y de la documentación de la biblioteca:
https://github.com/neworganizing/simple-salesforce
Para iniciar sesión usando el método de ID de organización de lista blanca de IP, simplemente use su nombre de usuario, contraseña e ID de organización de Salesforce
Esta. Si su dirección IP está incluida en la lista blanca, no necesita el token. Si no es así, NECESITA generar el token. Período.
Respuesta original
No estoy familiarizado con esa biblioteca de Python, pero … Vaya a Salesforce -> Configuración -> Mi información personal y verifique el historial de inicio de sesión. si contiene cosas como “falló: se requiere token de seguridad”, entonces estás jodido y voluntad tienes que usar el token de seguridad.
No tengo conocimiento de ningún bypass que use org id (me he conectado a través de API desde PHP, Java, C # … así que me sorprendería mucho si esa biblioteca de Python tuviera alguna forma mágica de omitirlo. acostumbrado a pasar una identificación de sesión que asume que ya está autenticado y tiene una sesión válida.
Otra opción sería verificar su IP y agregarla a rangos de IP confiables (es una opción en la configuración). Es útil cuando, por ejemplo, toda la oficina tiene la misma IP estática; menos útil si trabaja desde casa.
Si eso también es un no-go, es posible que desee buscar bibliotecas que usen OAuth2 en lugar de la API SOAP normal para autenticarse.