Connected Apps
A Connected App is the OAuth2 client configuration in Salesforce that enables external applications like sfp to authenticate and access Salesforce APIs. Understanding Connected Apps helps you control and secure how authentication works in your organization.
What is a Connected App?
A Connected App defines:
Client credentials (Client ID and Client Secret)
OAuth scopes (what the app can access)
Security policies (IP restrictions, session timeout)
Callback URLs (where to redirect after authentication)
When you run sf org login web, Salesforce asks you to authorize a Connected App to access your org.
The Default Connected App
sfp uses the Salesforce CLI's default Connected App, called "Salesforce CLI" (also known as PlatformCLI). This Connected App is:
Pre-configured in all Salesforce orgs
Managed by Salesforce
Has broad API access scopes
No setup required
Why sfp Uses the Default Connected App
Rather than requiring customers to create and maintain their own Connected Apps, sfp leverages the existing Salesforce CLI infrastructure:
┌─────────────────────────────────────────────────────────────────┐
│ Authentication Flow │
├─────────────────────────────────────────────────────────────────┤
│ │
│ User Salesforce CLI Salesforce │
│ │ │ │ │
│ │ sf org login web │ │ │
│ │──────────────────────>│ │ │
│ │ │ OAuth Request │ │
│ │ │ (PlatformCLI) │ │
│ │ │───────────────────────>│ │
│ │ │ │ │
│ │ Browser opens for authorization │ │
│ │<───────────────────────────────────────────────│ │
│ │ │ │ │
│ │ User authorizes │ │
│ │───────────────────────────────────────────────>│ │
│ │ │ │ │
│ │ │ Tokens returned │ │
│ │ │<───────────────────────│ │
│ │ │ │ │
│ │ Auth URL stored │ │ │
│ │<──────────────────────│ │ │
│ │
│ sfp then uses these credentials via @salesforce/core │
│ │
└─────────────────────────────────────────────────────────────────┘Benefits of Using the Default App
Zero configuration: Works out of the box
Automatic updates: Salesforce maintains security patches
Proven reliability: Used by millions of developers
Consistent behavior: Same experience across all orgs
When to Use a Custom Connected App
While the default Connected App works for most scenarios, you may want a custom Connected App for:
IP Restrictions
Limit authentication to specific IP ranges
Custom Session Policies
Shorter session timeouts for security
Audit Requirements
Track usage separately from CLI activity
JWT Bearer Flow
Headless CI/CD without user interaction
Limited Scopes
Restrict API access to specific operations
Creating a Custom Connected App
Step 1: Create the Connected App
Navigate to Setup > App Manager
Click New Connected App
Configure basic settings:
Connected App Name:
sfp-automationAPI Name:
sfp_automationContact Email: Your email
Step 2: Configure OAuth Settings
Enable OAuth and configure:
✓ Enable OAuth Settings
Callback URL:
http://localhost:1717/OauthRedirect
Selected OAuth Scopes:
- Access the identity URL service (id, profile, email, address, phone)
- Manage user data via APIs (api)
- Perform requests at any time (refresh_token, offline_access)
- Access unique user identifiers (openid)Step 3: Configure Security Policies (Optional)
Under OAuth Policies:
Permitted Users: Admin approved users are pre-authorized
IP Relaxation: Enforce IP restrictions
Refresh Token Policy: Configure token expiration
Step 4: Retrieve Client Credentials
After saving, click Manage Consumer Details to view:
Consumer Key (Client ID)
Consumer Secret
Using a Custom Connected App
Web-based Flow
# Set environment variables
export SFDX_CLIENT_ID=your_client_id
export SFDX_CLIENT_SECRET=your_client_secret
# Authenticate
sf org login web --client-id $SFDX_CLIENT_IDJWT Bearer Flow (CI/CD)
The JWT Bearer Flow is ideal for CI/CD as it doesn't require user interaction:
Generate a certificate:
openssl genrsa -out server.key 2048 openssl req -new -x509 -sha256 -key server.key -out server.crt -days 365Upload certificate to Connected App:
Edit the Connected App
Check Use digital signatures
Upload
server.crt
Pre-authorize the user:
Go to Setup > Manage Connected Apps
Find your app and click Manage
Click Edit Policies
Set Permitted Users to "Admin approved users are pre-authorized"
Add profiles/permission sets
Authenticate with JWT:
sf org login jwt \ --client-id $SFDX_CLIENT_ID \ --jwt-key-file ./server.key \ --username [email protected] \ --alias myOrg
SFDX Auth URL with Custom App
When using a custom Connected App, the SFDX Auth URL includes your client credentials:
force://YOUR_CLIENT_ID:YOUR_CLIENT_SECRET:[email protected]Connected App in SFDX Auth URLs
The SFDX Auth URL format reveals which Connected App was used:
force://<clientId>:<clientSecret>:<refreshToken>@<instanceUrl>
─────────
│
└─── "PlatformCLI" = Default Salesforce CLI app
Custom ID = Your Connected AppExamples
Default Connected App:
force://PlatformCLI::[email protected]Custom Connected App:
force://3MVG9d8...:7EF234...:[email protected]Security Best Practices
For the Default Connected App
Rely on user-level security (profiles, permission sets)
Use Salesforce's session management to revoke access if needed
Monitor login history in Setup
For Custom Connected Apps
Rotate secrets periodically: Regenerate the Consumer Secret
Use IP restrictions: Limit to known CI/CD IP ranges
Minimize scopes: Only request necessary permissions
Set session policies: Appropriate timeout values
Monitor usage: Review Connected App Usage reports
JWT Flow Security
Protect the private key: Store in secure secret management
Use short-lived certificates: Rotate annually
Pre-authorize specific users: Don't use "All users may self-authorize"
Troubleshooting
"Connected App not found"
Ensure the Connected App is created in the correct org
For sandbox authentication, the Connected App must exist in production (for JWT flow)
"Invalid client credentials"
Verify the Client ID and Secret
Check if the Consumer Secret was regenerated
"Refresh token expired"
Check the Refresh Token Policy on the Connected App
Re-authenticate to get a new refresh token
"IP blocked"
Verify your IP is in the allowed ranges
Check Trusted IP Ranges on the Connected App
Related Topics
SFDX Auth URL - Understanding the auth URL format
Org Authentication - Different authentication methods
Server Authentication - Authentication with sfp-server (Pro)
Last updated