| name | salesforce-security-basics |
| description | Apply Salesforce security best practices for Connected Apps, OAuth, and field-level security.
Use when securing API credentials, implementing least privilege access,
or auditing Salesforce security configuration.
Trigger with phrases like "salesforce security", "salesforce secrets",
"secure salesforce", "salesforce connected app security", "salesforce FLS".
|
| allowed-tools | Read, Write, Grep |
| version | 1.7.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","crm","salesforce"] |
| compatibility | Designed for Claude Code |
Salesforce Security Basics
Overview
Security best practices for Salesforce integrations: Connected App configuration, OAuth scope management, field-level security, and credential rotation.
Prerequisites
- Salesforce org with System Administrator access
- Connected App created in Setup > App Manager
- Understanding of Salesforce security model (Profile, Permission Set, OWD)
Instructions
Step 1: Secure Connected App Configuration
Setup > App Manager > New Connected App:
1. Enable OAuth Settings
2. Callback URL: https://yourapp.com/oauth/callback (NOT localhost in prod)
3. Selected OAuth Scopes — USE MINIMUM REQUIRED:
- "Manage user data via APIs (api)" — for REST/SOQL access
- "Perform requests at any time (refresh_token, offline_access)" — for refresh tokens
- DO NOT add "Full access (full)" unless absolutely necessary
4. Require Proof Key for Code Exchange (PKCE): Enable for public clients
5. Require Secret for Web Server Flow: Enable
6. IP Relaxation: "Enforce IP restrictions" (not "Relax IP restrictions")
Step 2: Credential Storage
# .env (NEVER commit to git)
SF_LOGIN_URL=https://login.salesforce.com
SF_USERNAME=integration-user@yourcompany.com
SF_PASSWORD=<from-vault>
SF_SECURITY_TOKEN=<from-vault>
SF_CLIENT_ID=<connected-app-consumer-key>
SF_CLIENT_SECRET=<connected-app-consumer-secret>
# .gitignore — ALWAYS include
.env
.env.local
.env.*.local
server.key # JWT private key
*.pem
*.key
Step 3: Use a Dedicated Integration User
Create a dedicated Salesforce user for API access:
1. Profile: Create "API Integration" profile (clone from Standard User)
- Login Hours: restrict to expected operating hours
- Login IP Ranges: restrict to your server IPs
- Object permissions: ONLY objects your integration needs
2. Permission Set: "Integration API Access"
- Object: Account — Read, Create, Edit (no Delete)
- Object: Contact — Read, Create, Edit (no Delete)
- Field-Level Security: only expose fields the integration reads/writes
3. NEVER use a System Administrator user for integrations
Step 4: Field-Level Security (FLS) Enforcement
const conn = await getConnection();
const meta = await conn.sobject('Account').describe();
industryField = meta..( f. === );
(!industryField?.) {
();
}
(!industryField?.) {
.();
}
accessibleFields = meta.
.( f.)
.( f.);
.(, accessibleFields.);