The Snowflake JDBC driver supports multiple IdP (Identity Providers) and one we've verified DbVisualizer with is OneLogin and browser based SSO. This simply means that the authentication process in DbVisualizer at connect with Snowflake will open a web browser that performs the authentication. Other than enabling DbVisualizer, you need to have an account with an IdP such as OneLogin, and the Snowflake account to allow for SSO.


Setting up the IdP account and Snowflake

Check the following step-by-step instruction by the Snowflake community how to setup OneLogin and Snowflake:

https://support.snowflake.net/s/article/configuring-onelogin-as-an-identity-provider


Enabling 'externalbrowser' authentication in DbVisualizer 

In DbVisualizer, browser based authentication is enabled by adding the driver property:

authenticator = externalbrowser

Set in the Driver Properties for the Snowflake database connection:

In the main window you can then leave the Password empty while entering all details about the Snowflake account:


Note that the Database Userid field must be set to the user you use in the SSO (in Windows ADFS it can be the email address).

Enabling 'connection caching' 

Having externalbrowser enabled, the user is prompted for authentication. This will result in multiple prompts as each SQL Commander uses one connection each. To minimize the number of prompts, a user with the ACCOUNTADMIN role can enable connection caching.


Define a connection hook in the Properties tab for the Snowflake connection:

use role accountadmin;
alter account set allow_id_token = true;

On the client you must also add the JNA jar (and JNA platform jar on Windows) to the driver, see: https://docs.snowflake.com/en/user-guide/jdbc-download.html#label-jdbc-driver-add-jna-classes-to-classpath


In DbVisualizer 13.0 and later you add the JNA by activation of the Artifacts for JNA in the Snowflake driver. Open Tools->Driver Manager, select the Snowflake driver, activate the JNA jars and download them, see new Driver Manger for how to do this.