[
https://issues.apache.org/jira/browse/CAMEL-24495?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18108288#comment-18108288
]
Sébastien Heilig commented on CAMEL-24495:
------------------------------------------
Exactly, so either my instance is already without (I am new to salesforce,
don't know well their technical rollout) or there is an issue with my password
(it is set to never expired, but maybe the security token can expire?), but for
me, I can't connect anymore with username-password.
In anycase, because of the retirement of username-password flow, I thought it
was a good idea to try the "client_credentials", and I have discovered this
behavior.
Let me know if this is a real issue and if the fix can be performed. It is
difficult for me to fork it in my customer environment to test the solution.
> Authentication-type detection is not triggered via
> camel-salesforce-maven-plugin. It still uses grant-type USERNAME_PASSWORD
> ----------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-24495
> URL: https://issues.apache.org/jira/browse/CAMEL-24495
> Project: Camel
> Issue Type: Bug
> Components: camel-salesforce
> Affects Versions: 4.22.0
> Reporter: Sébastien Heilig
> Priority: Blocker
>
> I am using camel-salesforce-maven-plugin to generate DTOs from salesforce for
> my customer. To do so, I was using grant_type=USERNAME_PASSWORD. It was
> working fine. In the Winter 27 update, that grant_type will be disabled.
>
> It seems, on my sandbox, this is already the case. It was working fine up to
> last week.
> Thus, I wanted to switch to grant_type=CLIENT_CREDENTIALS.
> By design, if no password (or empty password), the class
> org.apache.camel.component.salesforce.SalesforceLoginConfig seems to be able
> to determine the authenticationType via "getType" method.
> However, using the camel-maven-salesforce-plugin, there is 2 issues:
> # The authenticationType is not a Parameter of
> [https://github.com/apache/camel/blob/main/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/AbstractSalesforceMojo.java]
> so this is not possible to override the grant_type
> # The SalesforceLoginConfig instanciated here :
> [https://github.com/apache/camel/blob/main/components/camel-salesforce/camel-salesforce-codegen/src/main/java/org/apache/camel/component/salesforce/codegen/AbstractSalesforceExecution.java]
> enforces the constructor using USERNAME_PASSWORD, ignoring the fact that
> password is empty and that I want to use the CLIENT_CREDENTIALS
> authentication. The auto-detection of the grant_type is bypassed.
>
> *Step to reproduce*
> * Having a salesforce instances with a connectedApp
> * Using a client_id, client_secret, username and NO PASSWORD
> **
> <camelSalesforce.password></camelSalesforce.password>
> ** If you don't put it, the maven plugin refuses to start mentioning that
> field is mandatory.
> * Configuring the camel-salesforce-maven-plugin with
>
> {code:java}
> <plugin>
> <groupId>org.apache.camel.maven</groupId>
> <artifactId>camel-salesforce-maven-plugin</artifactId>
> <version>${camel-salesforce-maven-plugin.version}</version>
> <configuration>
>
> <outputDirectory>${project.build.directory}/generated-sources/camel</outputDirectory>
> <packageName>com.my.company.dtos</packageName>
> <clientId>${camelSalesforce.clientId}</clientId>
> <clientSecret>${camelSalesforce.clientSecret}</clientSecret>
> <userName>${camelSalesforce.userName}</userName>
> <!-- <password>${camelSalesforce.password}</password>-->
> <loginUrl
> default-value="https://login.salesforce.com">${camelSalesforce.loginUrl}
> </loginUrl>
> <isHttpProxySecure>false</isHttpProxySecure>
> <includes>
> <include>Account</include>
> </includes>
> <version>63.0</version>
> <httpProxyHost>${camelSalesforce.httpProxyHost}</httpProxyHost>
> <httpProxyPort>${camelSalesforce.httpProxyPort}</httpProxyPort>
> </configuration>
> <executions>
> <execution>
> <id>generate-dtos</id>
> <phase>generate-sources</phase>
> <goals>
> <goal>generate</goal>
> </goals>
> <configuration>
>
> <outputDirectory>${project.build.directory}/generated-sources/camel</outputDirectory>
> </configuration>
> </execution>
> </executions>
> </plugin> {code}
> *Error you get*
> {errors:[\{"errorCode":"invalid_grant","message":"Login error
> code:[invalid_grant] description:[authentication
> failure]","fields":null}],statusCode:400}
> If you debug the plugin, you see the constructor of SalesforceLoginConfig
> called is the following:
>
> {code:java}
> public SalesforceLoginConfig(String loginUrl, String clientId, String
> clientSecret, String userName, String password,
> boolean lazyLogin) {
> this(AuthenticationType.USERNAME_PASSWORD, loginUrl, clientId,
> clientSecret, null, userName, password, lazyLogin, null);
> } {code}
> And you see that the getType method is never used using the automatic
> detection.
>
> *Expected fix*
> The fix must use the empty constructor and uses the setter to override the
> parameter authenticationType in case this one is provided AND auto-detect
> that if password is missing (or empty), the grant_type should be
> auto-detected via the getType method and not forced to USERNAME_PASSWORD.
> *Versions impacted*
> I am using the version 4.22.0 but the previous versions (down to 4.18.x as
> far as I have checked) are also concerned.
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)