salesforce oauth-2.0 force.com

Error de autenticación de Salesforce



oauth-2.0 force.com (7)

TL: DR

Para tokens de OAuth 2 si inicias sesión ...

Historia:

  1. Estaba siguiendo Salesforce "Configurar OAuth 2.0"
  2. Las credenciales fueron correctas (muchas verificaciones de personaje por personaje)
  3. Cuando llamaba a curl https://login.salesforce.com/services/oauth2/token -d "...credentials..." aún fallaba con:

    {"error":"invalid_grant","error_description":"authentication failure"}

Solución:

Se dio cuenta de que hay diferentes entornos OAuth al leer Digging Deeper en OAuth 2.0 en Salesforce específicamente (énfasis añadido):

Puntos finales de autenticación OAuth 2.0

Los puntos finales OAuth son los URL que usa para realizar solicitudes de autenticación OAuth a Salesforce. Cuando su aplicación realiza una solicitud de autenticación, asegúrese de estar utilizando el punto final correcto de Salesforce OAuth. Los puntos finales primarios son:

En lugar de login.salesforce.com , los clientes también pueden usar los dominios Mi dominio , comunidad o test.salesforce.com (sandbox) en estos puntos finales.

Fijar

Debido a que test.salesforce.com sesión en mi entorno mediante test.salesforce.com cambiar a curl https://test.salesforce.com/services/oauth2/token -d "...credentials..." resultó en un "¡Felicidades! (> ^ _ ^)> Dar la respuesta del token de OAuth "

Intento utilizar la autenticación OAuth para obtener el token de autenticación de Salesforce, así que he recomendado los documentos wiki , pero después de obtener el código de autorización, cuando realizo una solicitud posterior con 5 parámetros requeridos, recibo la siguiente excepción

{"error":"invalid_grant","error_description":"authentication failure"} CODE 400 JSON = {"error":"invalid_grant","error_description":"authentication failure"}

que es, supongo, una mala solicitud.

PostMethod post = new PostMethod("https://login.salesforce.com/services/oauth2/token"); post.addParameter("code",##############); post.addParameter("grant_type","authorization_code"); post.addParameter("redirect_uri","#################"); post.addParameter("client_id",this.client_id); post.addParameter("client_secret",this.client_secret); httpclient.executeMethod(post); String responseBody = post.getResponseBodyAsString(); System.out.println(responseBody+" CODE "+post.getStatusCode());

Amable respuesta, si se conoce la excepción?


Estoy usando salesforce soap api con el siguiente formato de solicitud

<?xml version="1.0" encoding="utf-8" ?> <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:partner.soap.sforce.com"> <env:Header> <urn:CallOptions> <urn:client>client_id</urn:client> <urn:defaultNamespace>sf</urn:defaultNamespace> </urn:CallOptions> </env:Header> <env:Body> <n1:login xmlns:n1="urn:partner.soap.sforce.com"> <n1:username>username</n1:username> <n1:password>password+security_token</n1:password> </n1:login> </env:Body> </env:Envelope>

Logré iniciar sesión con éxito pero la aplicación no se muestra como mi configuración. Cuando probé con este método, estaba funcionando.

curl -v https://login.salesforce.com/services/oauth2/token -d "grant_type = password" -d "client_id = YOUR_CLIENT_ID_FROM_STEP_8" -d "client_secret = YOUR_CLIENT_SECRET_FROM_STEP_8" -d "username = [email protected]" -d "[email protected]"

¿Alguien puede decirme qué estoy haciendo mal o la API de salesforce api no es compatible con esto?


Para cualquiera que esté tan atascado y frustrado como yo, dejé una publicación de blog detallada sobre todo el proceso (¡con fotos y comentarios raciales!). Haga clic en el enlace si lo desea:

http://www.calvinfroedge.com/salesforce-how-to-generate-api-credentials/

Aquí hay una respuesta de solo texto:

Paso 1:

Crea una cuenta. Puede crear una cuenta de desarrollador (gratuita) en developer.salesforce.com

Paso 2:

Ignora todas las páginas de inicio y empieza a jugar basura. Es un ciclo de marketing interminable.

Paso 3:

Haga clic en el enlace "Configurar"

Etapa 4:

En la barra de herramientas de la izquierda, debajo de "Crear", haga clic en "Aplicaciones"

Paso 5:

En "Aplicaciones conectadas", haga clic en "Nuevo"

Paso 6:

Rellenar el formulario. Los campos importantes son los marcados como obligatorios y la sección oauth. Tenga en cuenta que puede dejar cualquier url para su devolución de llamada (utilicé localhost).

Paso 7:

Tenga en cuenta que Salesforce tiene una mala disponibilidad.

Paso 8:

Presione continuar Finalmente tiene su clave (identificación del cliente) y secreto (secreto del cliente).

Paso 9:

¡Pero espera! Aún no has terminado.

  1. Asegúrese de que la relajación IP esté configurada en restricciones de relajación de IP ,

  2. y asegúrese de que los Usuarios Permitidos estén configurados en "Todos los usuarios pueden auto-autorizarse.",

  3. y también asegúrese de que su Seguridad> Acceso a la red> Rangos de IP de confianza se haya configurado

Si le preocupa la desactivación de la seguridad, no lo haga por el momento, solo quiere que esto funcione por ahora para que pueda hacer llamadas a la API. Apriete los permisos una vez que tenga todo funcionando, uno a la vez, para que pueda averiguar qué configuración le está dando errores de autenticación.

Paso 10:

¡Celebrar! Esta llamada curl debe tener éxito:

en producción :

curl -v https://login.salesforce.com/services/oauth2/token / -d "grant_type=password" / -d "client_id=YOUR_CLIENT_ID_FROM_STEP_8" / -d "client_secret=YOUR_CLIENT_SECRET_FROM_STEP_8" / -d "[email protected]" -d "[email protected]"

en sandbox o prueba :

curl -v https://test.salesforce.com/services/oauth2/token / -d "grant_type=password" / -d "client_id=YOUR_CLIENT_ID_FROM_STEP_8" / -d "client_secret=YOUR_CLIENT_SECRET_FROM_STEP_8" / -d "[email protected]" -d "[email protected]"

Notas:

  • No debe realizar la autorización de contraseña si está creando una aplicación para varios usuarios, donde los usuarios deben autorizar su propia aplicación. Use el flujo de trabajo de Oauth2 para eso.

  • Es posible que deba pasar su token de seguridad adjunto a su contraseña.


Para incluir en la lista blanca un rango de direcciones IP, siga estos pasos:

  1. Haga clic en Setup en la esquina superior derecha
  2. Seleccione Administer > Security Controls > Network Access a la Network Access desde la barra de navegación de la izquierda
  3. Haga clic en New
  4. Agregue su rango de direcciones IP
  5. Haga clic en Save

Reemplace su contraseña de Salesforce con la combinación de la contraseña y el token de seguridad. Por ejemplo, si su contraseña es "MyPassword" y su token de seguridad es "XXXXXX", deberá ingresar "MyPasswordXXXXXX" en el campo de contraseña.

Si no tiene el token de seguridad, puede restablecerlo como se indica a continuación.

  • Vaya a Su nombre -> Mi configuración -> Personal -> Restablecer mi token de seguridad.

Salesforce exige una actualización a TLS 1.1 o superior antes del 22 de julio de 2017 para alinearse con las mejores prácticas de la industria en cuanto a seguridad e integridad de datos: de help.salesforce.com .

intenta agregar este código:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

Otra opción es editar su registro:

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/v4.0.30319] "SchUseStrongCrypto"=dword:00000001 [HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/.NETFramework/v4.0.30319] "SchUseStrongCrypto"=dword:00000001

Consulte este enlace para obtener respuestas más detalladas: Default SecurityProtocol in .NET 4.5


Tuvimos este problema también.

Verifique la configuración de la aplicación conectada : en ámbitos seleccionados de OAuth , es posible que deba ajustar los permisos seleccionados. Nuestra aplicación utiliza principalmente Chatter , por lo que tuvimos que agregar ambos:

  • Acceda y administre su feed de Chatter ( chatter_api )
  • Realice solicitudes en su nombre en cualquier momento ( refresh_token ).

Una vez más, su millaje puede variar, pero pruebe diferentes combinaciones de permisos según lo que hace / necesita su Aplicación.

Además, el error de invalid_grant real parece ocurrir debido a restricciones de IP . Asegúrese de que se permita la dirección IP del servidor que ejecuta el código de autenticación OAuth. Descubrí que si el entorno SFDC tiene una configuración de restricción de IP Aplicar restricciones de IP establecidas ( Configuración -> Administrar -> Administrar aplicaciones -> Aplicaciones conectadas ), entonces cada Perfil de usuario también debe tener las direcciones IP permitidas.