From ad2a0673b34f43c0abedf2ec7f6a0a6edb1e4162 Mon Sep 17 00:00:00 2001 From: Muskan Gupta Date: Tue, 28 Jan 2025 11:07:16 +0530 Subject: [PATCH] Updated jaas config --- .../sqlserver/jdbc/KerbAuthentication.java | 3 +- .../sqlserver/jdbc/KerberosTest.java | 45 ++++++++++++++++--- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/KerbAuthentication.java b/src/main/java/com/microsoft/sqlserver/jdbc/KerbAuthentication.java index 120f78999..bcab927cd 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/KerbAuthentication.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/KerbAuthentication.java @@ -13,7 +13,6 @@ import java.util.logging.Level; import javax.security.auth.Subject; -import javax.security.auth.login.Configuration; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; @@ -108,7 +107,7 @@ private void initAuthInit() throws SQLServerException { if (null == currentSubject) { if (useDefaultJaas) { - lc = new LoginContext(configName, null, callback, new JaasConfiguration(null)); + lc = new LoginContext(configName, null, callback); } else { lc = new LoginContext(configName, callback); } diff --git a/src/test/java/com/microsoft/sqlserver/jdbc/KerberosTest.java b/src/test/java/com/microsoft/sqlserver/jdbc/KerberosTest.java index 1f38f9a63..c70a30fe0 100644 --- a/src/test/java/com/microsoft/sqlserver/jdbc/KerberosTest.java +++ b/src/test/java/com/microsoft/sqlserver/jdbc/KerberosTest.java @@ -16,7 +16,6 @@ import java.util.HashMap; import java.util.Map; - @Tag(Constants.kerberos) @RunWith(JUnitPlatform.class) public class KerberosTest extends AbstractTest { @@ -34,11 +33,16 @@ public static void setupTests() throws Exception { * Configures JAAS for the test environment. */ private static void configureJaas() { - AppConfigurationEntry kafkaClientConfigurationEntry = new AppConfigurationEntry( + Map options = new HashMap<>(); + options.put("useTicketCache", "true"); + options.put("renewTGT", "true"); + options.put("doNotPrompt", "false"); // Allow prompting for credentials if necessary + + AppConfigurationEntry kerberosConfigurationEntry = new AppConfigurationEntry( "com.sun.security.auth.module.Krb5LoginModule", AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, - new HashMap<>()); + options); Map configurationEntries = new HashMap<>(); - configurationEntries.put("SQLJDBCDriver", new AppConfigurationEntry[] {kafkaClientConfigurationEntry}); + configurationEntries.put("SQLJDBCDriver", new AppConfigurationEntry[] {kerberosConfigurationEntry}); Configuration.setConfiguration(new InternalConfiguration(configurationEntries)); } @@ -105,15 +109,42 @@ private static void createKerberosConnection(String connectionString) throws Exc } } + /** + * Test to verify the Kerberos module used + */ + @Test + public void testKerberosConnectionWithDefaultJaasConfig() { + try { + // Set a mock JAAS configuration using the existing method + overwriteJaasConfig(); + + String connectionString = connectionStringKerberos + ";useDefaultJaasConfig=true;"; + createKerberosConnection(connectionString); + + Configuration config = Configuration.getConfiguration(); + AppConfigurationEntry[] entries = config.getAppConfigurationEntry("CLIENT_CONTEXT_NAME"); + Assertions.assertNotNull(entries); + Assertions.assertTrue(entries.length > 0); + Assertions.assertEquals("com.sun.security.auth.module.Krb5LoginModule", entries[0].getLoginModuleName()); + } catch (Exception e) { + Assertions.fail("Exception was thrown: " + e.getMessage()); + } + } + /** * Overwrites the default JAAS config. Call before making a connection. */ private static void overwriteJaasConfig() { - AppConfigurationEntry kafkaClientConfigurationEntry = new AppConfigurationEntry( + Map options = new HashMap<>(); + options.put("useTicketCache", "true"); + options.put("renewTGT", "true"); + options.put("doNotPrompt", "false"); // Allow prompting for credentials if necessary + + AppConfigurationEntry kerberosConfigurationEntry = new AppConfigurationEntry( "com.sun.security.auth.module.Krb5LoginModule", AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, - new HashMap<>()); + options); Map configurationEntries = new HashMap<>(); - configurationEntries.put("CLIENT_CONTEXT_NAME", new AppConfigurationEntry[] {kafkaClientConfigurationEntry}); + configurationEntries.put("CLIENT_CONTEXT_NAME", new AppConfigurationEntry[] {kerberosConfigurationEntry}); Configuration.setConfiguration(new InternalConfiguration(configurationEntries)); }