Introduction
This guide walks you through setting up Snowflake OAuth for custom clients, where Snowflake acts as your OAuth authorization server, and FME securely connects as the OAuth client using the Authorization Code Grant Flow.
This authentication method is ideal when you want Snowflake itself to manage OAuth authentication, rather than using an external identity provider. It provides secure, token-based access to your Snowflake resources without requiring users to manage passwords directly in FME.
Before You Begin
This guide assumes you're comfortable with basic OAuth 2.0 concepts (Client ID, Client Secret, Redirect URI) and can navigate both FME and Snowflake interfaces. If you need a refresher on OAuth fundamentals, review the resources in the Additional Resources section at the end of this article.
Also, review Snowflake's OAuth documentation, particularly documentation for Configuring Snowflake OAuth for custom clients, and consider your organization's security policies before proceeding. Providing security recommendations is highly dependent on your enterprise/business needs and is therefore out of scope for this article.
Security Note
A quick note on security. This authentication method requires that the client secret be sent with the OAuth request, so it is worth noting that:
- FME Flow is a Confidential/Private client, meaning it can securely store client secrets on the server
- FME Form is considered a Native/Public client, though sensitive information from web services remains encrypted
If you’re curious about FME’s posture on security and current certifications, please see our Security page.
Redirect Strategy and External Browser Authentication
FME Form 2025.2+ introduces external browser authentication, offering three redirect strategies:
-
Proxy Redirect (Safe Software): Uses a Safe-hosted redirect page:
https://fmeauth.safe.com/v1/oauth2 -
Loopback Interface: Uses
http://localhostto “point back” to your own machine- Not guaranteed to work for every OAuth Service; in this case, Snowflake doesn’t support
localhostredirect URIs, although it does support Loopback with other redirect URIs
- Not guaranteed to work for every OAuth Service; in this case, Snowflake doesn’t support
-
Embedded Browser: Set for deprecation in future FME releases
- Please use one of the above options instead
This article uses Proxy Redirect, which is the recommended alternative if FME’s current Loopback Interface implementation does not work with your Authorization Server, like Snowflake.
Note: For more information on the redirect strategies and the external browser, please see the article: External Browser Authentication in FME Form.
Requirements
- FME 2025.2+
- System default browser (Chrome, Edge, Firefox on Windows/Linux; Safari on macOS) - if using external browser authentication
- FME Knowledge
- Basic understanding of FME connections and parameters
- Snowflake Knowledge
- Worksheets, running SQL commands, and navigating Snowflake Site
- Understanding of Snowflake roles and permissions
- ACCOUNTADMIN role access (or equivalent permissions to create Security Integrations)
- OAuth 2.0 Fundamentals
- Understanding of Client ID, Client Secret, and Redirect URI concepts
- Basic familiarity with authorization flows
Resources are available below covering a few of the requirements if you need a reminder on key concepts, including Web Connections in FME and Snowflake Basics.
Step-by-Step Instructions
This guide provides a practical, end-to-end example of setting up Snowflake OAuth authentication in FME. Here's what you'll accomplish:
- Create a custom OAuth client in Snowflake - Configure the security integration that FME will use
- Test the connection in FME Form - Verify your setup works with external browser authentication
- Upload a connection FME Flow - Transfer your database and web connection configurations, assuming you created a security integration for your Flow instance
- Update the redirect URI - Modify your redirect URI FME Flow's callback URL
- Verify in FME Flow - Authenticate, then confirm everything works in your Flow environment
The exact steps and configuration may vary from this example depending on your business requirements and security policies.
Part 1: Create Snowflake OAuth Security Integration
In this section, you'll create the Snowflake OAuth security integration that allows FME to act as a custom OAuth client. This is where you'll configure which roles FME users can access and how authentication will work.
The steps are outlined in more detail in Snowflake's documentation: CREATE SECURITY INTEGRATION (Snowflake OAuth)
1. Connect to Snowflake and Create the Security Integration
In Snowflake, from the top left of the page, create a new SQL Worksheet:
- “+” → Create
This opens a Snowflake worksheet where you can execute SQL commands to create a Security Integration. Here's an example command to create the security integration:
CREATE SECURITY INTEGRATION
FME_OAUTH_INTEGRATION
TYPE = OAUTH
OAUTH_CLIENT = CUSTOM
OAUTH_CLIENT_TYPE = 'PUBLIC'
OAUTH_REDIRECT_URI = 'https://fmeauth.safe.com/v1/oauth2'
ENABLED = TRUE
PRE_AUTHORIZED_ROLES_LIST = ('DATA_ANALYST', 'DATA_ENGINEER')
COMMENT = 'FME OAuth integration with Proxy Redirect';
Some key parameters in this example include:
- FME_OAUTH_INTEGRATION: A unique name for your security integration (you can change this to any other descriptive name)
- TYPE = OAUTH: A required parameter to describe the type of authentication this integration is in Snowflake
- OAUTH_CLIENT = CUSTOM: Required parameter to allow FME to connect as a custom OAuth client
-
OAUTH_CLIENT_TYPE = 'PUBLIC': The type of OAuth Client
- For FME Form, keep this as ‘PUBLIC.’
- Change this to ‘CONFIDENTIAL’ in FME Flow deployments where secrets can be securely stored server-side
-
OAUTH_REDIRECT_URI: Must exactly match what FME sends during authentication
- For Proxy Redirect in Form:
https://fmeauth.safe.com/v1/oauth2 - For FME Flow: You'll update this later to your Flow-specific URL:
https://<your-fme-flow-url>/fmeoauth
- For Proxy Redirect in Form:
- PRE_AUTHORIZED_ROLES_LIST: Defines which Snowflake roles users can access through this integration
For complete parameter documentation, see Snowflake’s guide: CREATE SECURITY INTEGRATION (Snowflake OAuth).
2. Retrieve OAuth Client Credentials
After creating the security integration, you need to retrieve the Custom Client details, like the Client ID that Snowflake generated. In a new worksheet, execute:
DESC SECURITY INTEGRATION FME_OAUTH_INTEGRATION;Replace FME_OAUTH_INTEGRATION with your security integration name if necessary.
In the results, take note of the values of:
- OAUTH_CLIENT_ID - This is the Client ID that you'll use in FME
-
Your Snowflake Account URL - This shows your account URL often in the form:
https://<your-company>.snowflakecomputing.com- In OAUTH_AUTHORIZATION_ENDPOINT, the account URL is everything before
/oauth/authorizein the Authorization Endpoint.
- In OAUTH_AUTHORIZATION_ENDPOINT, the account URL is everything before
You’ll also be able to confirm your Redirect URI under the property OAUTH_REDIRECT_URI.
3. Retrieve the Client Secret
Next, retrieve the Client Secret by executing:
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('FME_OAUTH_INTEGRATION');Replace FME_OAUTH_INTEGRATION with your security integration name.
You’ll receive two Client Secrets by default. Either value should work with FME. For this example, copy the value saved between the quotation marks for OAUTH_CLIENT_SECRET.
A second Client Secret is provided by Snowflake to allow for easy secret rotation. For more information, review Snowflake’s Control documentation.
Be sure to store this Client Secret securely. You'll need it to configure FME, and you won't be able to retrieve it again through the Snowflake UI (though you can regenerate a new one if needed).
At this point, you should have collected:
-
Client ID: The unique identifier from the
DESCcommand -
Client Secret: The confidential string from the
SHOW_OAUTH_CLIENT_SECRETScommand -
Snowflake Account URL: Your account URL in the format
https://<your-company>.snowflakecomputing.com - Redirect URI: Will be set automatically in FME based on your chosen redirect strategy
You're now ready to move on to Part 2 to configure the web service in FME Form.
Part 2: Configure Snowflake OAuth in FME Form
In this section, you'll create a web service in FME Form that stores your OAuth configuration, then create a database connection that uses this web service for authentication.
If you need a deeper understanding of web services and web connections in FME, review the article: Creating an OAuth 2.0 Web Service and Connection in FME.
1. Open FME Workbench and Navigate to Manage Services
In FME Workbench, navigate to:
- Utilities → FME Options → Web Connections → Manage Services…
This opens the Manage Web Services dialog, where you can configure OAuth services
2. Add a Web Connection to Snowflake
- In the Manage Web Services dialog, click the "+" symbol → Create From → Snowflake OAuth
This creates a child (copy) web service based on the Snowflake OAuth template. Give your web service a descriptive name that reflects your specific integration, for example: SNOWFLAKE_FME_OAUTH_INTEGRATION
Use a naming convention that helps you identify this service later, especially if you'll have multiple Snowflake connections.
3. Configure the OAuth Web Service Parameters
Now you'll fill in the OAuth web service configuration using the credentials you retrieved from Snowflake. Parameters marked with a red asterisk are required. Here's how to configure each section:
-
Client Information
-
Client ID: Paste the Client ID from your Snowflake
DESC SECURITY INTEGRATIONcommand (Part 1, Step 2) -
Client Secret: Paste the Client Secret from the
SYSTEM$SHOW_OAUTH_CLIENT_SECRETScommand (Part 1, Step 3) -
Redirect Strategy: Select Proxy Redirect (recommended)
- The Redirect URI field will automatically populate with
https://fmeauth.safe.com/v1/oauth2
- The Redirect URI field will automatically populate with
-
Client ID: Paste the Client ID from your Snowflake
-
Authorization Parameters
-
URL: Enter your Snowflake Account URL:
https://<your-company>.snowflakecomputing.com- This is the base URL you noted from the OAUTH_AUTHORIZATION_ENDPOINT in Part 1, Step 2
-
URL: Enter your Snowflake Account URL:
-
Retrieve Token Parameters
-
URL: Enter the same Snowflake Account URL:
https://<your-company>.snowflakecomputing.com
-
URL: Enter the same Snowflake Account URL:
-
Refresh Token Parameters
-
URL: Enter the same Snowflake Account URL:
https://<your-company>.snowflakecomputing.com
-
URL: Enter the same Snowflake Account URL:
All three URL fields (Authorization, Retrieve Token, and Refresh Token) should contain your Snowflake Account URL, however, FME does append the Refresh Token Parameters with the appropriate URL automatically.
4. Test the Connection
Before saving, verify your configuration works by clicking Test at the bottom of the web service configuration dialog.
Your system's default browser will then open to Snowflake's authentication page. This happens outside of FME when using Proxy Redirect or Loopback strategies.
Complete the authentication flow:
- Log in with your Snowflake credentials
- If MFA is enabled for your account, complete the MFA challenge
- If prompted, consent to the requested role access
Once authentication succeeds in your browser, a pop-up will appear. Click Open FME Auth. You should see a confirmation message: "User authorized for… web service"
If the test succeeds, click OK.
5. Add a Snowflake Database Connection
Now that your web service is configured, you'll create a database connection that uses this OAuth web service for authentication.
After saving and closing the Manage Web Services dialog, stay in the FME Options window and navigate to:
- Database Connections → "+" → Add
In the Add Database Connection dialog, select Snowflake from the list of available database formats.
6. Link the Database Connection to Your OAuth Web Service
In the Add Database Connection dialog, configure the authentication.
- Authentication Parameters
- Authentication: Select OAuth Connection from the dropdown
- OAuth Connection: Click Add Web Connection
This opens the Add Web Connection dialog.
In the Add Web Connection dialog, configure it as follows:
-
Web Service: Select your newly created Snowflake OAuth web service
- Example: SNOWFLAKE_FME_OAUTH_INTEGRATION
-
Connection Name: Give this web connection a descriptive name
- Example: ANALYST_ROLE_SNOWFLAKE_OAUTH
- This name should reflect the role or purpose of this specific connection
Click OK to save the web connection.
FME will prompt you to authenticate this web connection, similar to when you tested the web service. Your browser will open, and you'll complete the Snowflake authentication flow again.
7. Complete the Database Connection Configuration
After authenticating the web connection, you'll return to the Add Database Connection dialog. Complete the remaining Snowflake-specific parameters. Required ones being highlighted with a red asterisk:
- Name: A descriptive name for this database connection (e.g., Snowflake_Production_OAuth)
- Account Name: Your Snowflake account identifier (e.g., orgname-account123)
- Warehouse: The Snowflake virtual warehouse you want to use (e.g., COMPUTE_WH)
- Database: The database containing your target schema (e.g., PRODUCTION_DB)
- Schema: The schema containing your database resources (e.g., PUBLIC)
- Role: A role assigned to your user and listed in your integration's PRE_AUTHORIZED_ROLES_LIST (e.g., DATA_ANALYST)
These parameters are case-sensitive and whitespace-sensitive. Ensure they match your Snowflake configuration exactly.
Click Test to verify the full connection works. If successful, you'll see a confirmation message. You can now click OK to save this database connection.
You now have a working Snowflake OAuth database connection in FME Form. You can use this connection in your workspaces to read from or write to Snowflake.
If you're using FME Flow, continue to Part 3 to configure this connection for your Flow environment.
Part 3: Upload and Configure for FME Flow
In this section, you'll:
- Upload your database connection and web service to FME Flow
- Update the connections in FME Flow to point to the relevant security integration information
- Authenticate the Services and validate that they are configured correctly
If you have not already created a security integration in Snowflake for FME Flow, please follow the steps in Part 1. Snowflake doesn’t allow multiple redirect URIs, so if you intend on using this connection in Form and Flow, you may want to consider creating separate security integrations for both.
You can test in Form then easily change the redirect URI in Snowflake to use a Flow specific URI. In Snowflake, that would be the Alter Integration command.
As a reminder, when creating the FME Flow security integration in Snowflake, set the parameters:
- OAUTH_CLIENT_TYPE to 'CONFIDENTIAL'
- OAUTH_REDIRECT_URI to use your Flow instance URL
FME Flow uses a different redirect URI than FME Form. Flow needs to receive the OAuth callback at its own server URL, not through Safe Software's proxy or your local machine.
1. Upload the Database Connection to FME Flow
In FME Workbench, navigate to:
- FME Options → Database Connections
Then right-click on your newly created Snowflake Database Connection and click Upload. This will open an Upload Connection dialog, where you either:
- Select the FME Flow instance you want to use, or
- Select Connect to FME Flow
When prompted, enter your FME Flow connection details (server URL, username, and password).
Once complete, you'll see an Upload Successful confirmation dialog.
2. Upload the Web Connection to FME Flow
Next, upload the web service definition. Navigate to:
- FME Options → Web Connections → Upload
This uploads your Snowflake OAuth web service configuration to Flow.
3. Configure the Web Service in FME Flow
Now you'll update the web service configuration in FME Flow's web interface to match the new redirect URI.
In your browser, log in to your FME Flow web interface and navigate to:
- Connections & Parameters → Web Connections → Manage Web Services
Locate your web service in the Manage Web Services page, and find your uploaded Snowflake web service. It will have the category oauthv2. Click on it to open the configuration.
Update the redirect URI and verify credentials:
-
Redirect URI: Change this to
https://<your-fme-flow-url>/fmeoauth- Replace
<your-fme-flow-url>with your actual FME Flow URL - This should match exactly what you set in Snowflake when you created the security integration in Part 1
- Replace
-
Client Information:
- Client ID: Verify this matches your Snowflake security integration's Client ID
- Client Secret: Verify this is correctly populated
Click Save to apply the changes.
4. Authorize the Web Connection
After first publishing the connection from Form to Flow, it’s important to re-authenticate in FME Flow, to confirm that it is working:
- Connections & Parameters → Web Connections
Find your Snowflake web connection in the list, select it, then click Authorize.
Your browser will redirect to Snowflake's login page. Log in with a Snowflake account that has appropriate role permissions and complete the OAuth Process. You’ll then be redirected back to your FME Flow instance, where a green check at the end of your Web Connection name will validate that you’re successfully reauthenticated to the webservice.
5. Configure the Database Connection in FME Flow
Finally, verify that your database connection is configured correctly in Flow.
In the Connections & Parameters tab, navigate to Database Connections and select your uploaded Snowflake database connection.
Verify all configuration details:
-
Parameters: Confirm these match your Snowflake environment:
- Account Name
- Warehouse
- Database
- Schema
- Role
-
Authentication Parameters:
- Authentication: Should be set to OAuth Connection
- OAuth Connection: Select your configured Snowflake OAuth web connection from the dropdown
Click Save to apply any changes.
Your Snowflake OAuth database connection is now configured and authenticated in FME Flow. This connection can be used in any published workspaces, scheduled jobs, or automations running on your FME Flow server.
6. Using the Connection and Re-authentication
It’s important to note that you may need to re-authenticate the connection in FME Flow after some time, as tokens expire. Because this OAuth flow uses the Authorization Code Grant, someone needs to complete the authentication flow to generate valid tokens again.
Troubleshooting
Redirect URI Mismatch
Error: "There is a mismatch in the given redirect URI with the one in the registered OAuth client integration."
Solution:
- Verify the redirect URI in Snowflake exactly matches what FME is sending
- For FME Form with Proxy Redirect: Use
https://fmeauth.safe.com/v1/oauth2 - For FME Flow: Use
https://<your-fme-flow-url>/fmeoauth
- For FME Form with Proxy Redirect: Use
- Check for trailing slashes, capitalization differences, or whitespace
Invalid Client Error
Error: "This is an invalid client."
Solution:
- Verify Client ID is correct (check with
DESC SECURITY INTEGRATION)- Check for trailing slashes, capitalization differences, or whitespace
- Verify Client Secret is correct (retrieve with
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS())- Check for trailing slashes, capitalization differences, or whitespace
- Ensure the integration is ENABLED (
ENABLED = TRUE) - Confirm you're using the correct Snowflake account identifier in URLs
Role Access Denied
Error: User cannot access the specified role/ Role not granted to user
Solution:
- Verify the role is in
PRE_AUTHORIZED_ROLES_LIST - Ensure the role is assigned to your Snowflake user
- Check that role name casing matches exactly (roles are case-sensitive)
- Verify the role has appropriate privileges for the requested operations.
- By default, Snowflake often blocks Admin Roles from Authentication for data security reasons. Be sure to authenticate with a non-admin role or make the necessary security integration change.
Token Expired
Error: Access token has expired
Solution:
- FME should automatically refresh tokens using the refresh token, but if the refresh fails, users may need to re-authenticate
- Consider increasing
OAUTH_REFRESH_TOKEN_VALIDITYif tokens expire too quickly - Check that OAUTH_ISSUE_REFRESH_TOKENS = TRUE
Browser Not Opening (FME Form 2025.2+)
Error: The External browser doesn't open for authentication
Solution:
- Verify the system default browser is set
- Supported browsers: Chrome, Edge, Firefox (Windows/Linux), Safari (macOS)
- Check that firewall settings aren't blocking the authentication URL
- Try switching between Proxy Redirect and Loopback Interface strategies
Additional Resources
- Snowflake OAuth Introduction - Understanding OAuth types in Snowflake
- Snowflake OAuth for Custom Clients - Comprehensive guide to custom OAuth clients
- CREATE SECURITY INTEGRATION (Snowflake OAuth) - Complete SQL reference
- ALTER SECURITY INTEGRATION (Snowflake OAuth) - Change parameter values in the Security Integration (e.g, the redirect URI)
- Creating an OAuth 2.0 Web Service and Connection in FME - OAuth 2.0 in FME
- FME Flow Database Troubleshooting Guide - Troubleshooting failing workspaces in FME Flow
- FME Community - Ask questions and share experiences
- Submit a Support Ticket - Submit a support case for authentication issues or questions