diff --git a/ojdbc-provider-oci/src/main/java/oracle/jdbc/provider/oci/authentication/AuthenticationDetailsFactory.java b/ojdbc-provider-oci/src/main/java/oracle/jdbc/provider/oci/authentication/AuthenticationDetailsFactory.java index 2bafbee5..5216bda7 100644 --- a/ojdbc-provider-oci/src/main/java/oracle/jdbc/provider/oci/authentication/AuthenticationDetailsFactory.java +++ b/ojdbc-provider-oci/src/main/java/oracle/jdbc/provider/oci/authentication/AuthenticationDetailsFactory.java @@ -239,23 +239,24 @@ private static AbstractAuthenticationDetailsProvider getAuthenticationDetails( * Returns authentication details using the following API key-based * methods: *
    - *
  1. Simple authentication: if any of the credentials, including tenant ID - * , user ID, fingerprint, private key, or passphrase, are provided in - * the given {@code parameters}
  2. + *
  3. Simple authentication: if all required credentials (tenant ID, + * user ID, fingerprint, and private key are provided in the given + * {@code parameters}
  4. *
  5. Config File (API key) authentication: otherwise
  6. *
* @return API key-based authentication details */ private static AuthenticationDetailsProvider apiKeyBasedAuthentication(ParameterSet parameters) { - if (parameters.contains(TENANT_ID) - || parameters.contains(USER_ID) - || parameters.contains(FINGERPRINT) - || parameters.contains(PRIVATE_KEY) - || parameters.contains(PASS_PHRASE) - || parameters.contains(REGION)) { + boolean hasAllRequiredKeys = + parameters.contains(TENANT_ID) + && parameters.contains(USER_ID) + && parameters.contains(FINGERPRINT) + && parameters.contains(PRIVATE_KEY); + + if(hasAllRequiredKeys) return simpleAuthentication(parameters); - } + return configFileAuthentication(parameters); } diff --git a/ojdbc-provider-oci/src/test/java/oracle/jdbc/provider/oci/AuthenticationDetailsFactoryTest.java b/ojdbc-provider-oci/src/test/java/oracle/jdbc/provider/oci/AuthenticationDetailsFactoryTest.java index 8e336f57..969872de 100644 --- a/ojdbc-provider-oci/src/test/java/oracle/jdbc/provider/oci/AuthenticationDetailsFactoryTest.java +++ b/ojdbc-provider-oci/src/test/java/oracle/jdbc/provider/oci/AuthenticationDetailsFactoryTest.java @@ -72,6 +72,17 @@ public void testConfigFile() { .build()); } + /** + * Verifies partial API_KEY credentials fallback to config file. + */ + @Test + public void testApiKeyPartialCredentials() { + verifyAuthenticationDetails( + buildParameterSet(AuthenticationMethod.API_KEY) + .add("Test OCI_USER", AuthenticationDetailsFactory.USER_ID, "dummy-user-id") + .build()); + } + /** * Verifies {@link AuthenticationMethod#CLOUD_SHELL} */