[
https://issues.apache.org/jira/browse/CAMEL-24495?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18108285#comment-18108285
]
Torsten Mielke commented on CAMEL-24495:
----------------------------------------
I am going to take a closer look at this ticket.
The instance that I am currently testing against still allows for
grant_type=USERNAME_PASSWORD.
But the retirement of username-password flows for connected apps is confirmed
at
https://help.salesforce.com/s/articleView?id=release-notes.rn_security_unpw_flow_retirement.htm&release=262&type=5
> 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)