ERP Authentication Comparison: OAuth Flows, Certificates & Service Accounts Across Major ERPs
How do authentication methods compare across major ERPs - OAuth flows, certificates, service accounts?
TL;DR
Bottom line: Every major ERP now supports OAuth 2.0, but implementation details vary wildly -- Salesforce offers 5 OAuth flows, SAP requires communication arrangements per scenario, Oracle uses IDCS/IAM, Dynamics 365 uses Entra ID, NetSuite is deprecating TBA, and Workday couples OAuth with ISUs.
Key limit: Token lifetimes range from 1 hour (Dynamics 365, Oracle) to 2 hours (Salesforce default); certificate and refresh token expiration policies are the #1 cause of unattended integration failures.
Watch out for: NetSuite TBA (OAuth 1.0) deprecation -- as of 2027.1, no new TBA integrations can be created; existing ones must migrate to OAuth 2.0.
Best for: Architects evaluating which OAuth flow to use for server-to-server ERP integrations, or teams migrating from basic auth / API keys to OAuth 2.0.
Authentication: Use JWT Bearer (Salesforce), Client Credentials (SAP, Dynamics 365), Authorization Code with PKCE (Oracle, NetSuite), or OAuth + ISU (Workday) for server-to-server.
System Profile
This comparison covers the six most widely integrated cloud ERPs as of early 2026. Each system uses OAuth 2.0 as the primary API authentication mechanism, but the specific flows, token management, and certificate requirements differ substantially. On-premise deployments are excluded.
System
Role
Primary Auth
Preferred S2S Flow
Salesforce
CRM + Platform
OAuth 2.0 (5 flows)
JWT Bearer
SAP S/4HANA Cloud
ERP Core
OAuth 2.0 + SAML
Client Credentials
Oracle Fusion Cloud ERP
ERP Core
OAuth 2.0 via IDCS/IAM
Authorization Code
Microsoft Dynamics 365
ERP/CRM
OAuth 2.0 via Entra ID
Client Credentials + Certificate
NetSuite
ERP/Financials
OAuth 2.0 (migrating from TBA)
Authorization Code + PKCE
Workday
HCM/Finance
OAuth 2.0 + ISU
Refresh Token (non-expiring)
API Surfaces & Capabilities
System
OAuth Provider
Supported Auth Methods
Certificate Auth?
Mutual TLS?
API Key Auth?
Salesforce
Built-in OAuth
OAuth 2.0 (5 flows), SAML
Yes (JWT flow)
No
No
SAP S/4HANA Cloud
SAP BTP / Cloud Identity
OAuth 2.0, SAML 2.0, Client Cert, Basic (dev)
Yes (mTLS)
Yes
No
Oracle Fusion Cloud
IDCS / OCI IAM
OAuth 2.0, Basic (deprecated), SAML
Yes (JWT assertion)
No
No
Dynamics 365
Microsoft Entra ID
OAuth 2.0, Certificate, Client Secret
Yes
No
No
NetSuite
Built-in OAuth
OAuth 2.0, TBA (deprecated)
Yes (M2M RSA)
No
No
Workday
Built-in OAuth
OAuth 2.0, ISU, SAML
Yes (JWT bearer)
No
No
Rate Limits & Quotas
Authentication-Specific Limits
System
Token Requests/Hour
Concurrent Sessions
Failed Auth Lockout
Notes
Salesforce
No explicit limit
5 active tokens/user/app
10 failed attempts
Session timeout configurable (default 2h)
SAP S/4HANA Cloud
Throttled per arrangement
Per-tenant limits
Configurable
Token endpoint: 100 req/s
Oracle Fusion Cloud
IDCS: 50 req/min/client
Limited by IDCS tier
5 attempts = 30-min lock
Refresh token: 7-day default
Dynamics 365
Entra ID: 10 req/s/tenant
No hard limit
Smart lockout
Access token: 60-90 min
NetSuite
No explicit limit
10 concurrent/integration
6 failed attempts
OAuth 2.0 tokens: 60 min
Workday
No explicit limit
Per-ISU
Configurable
Non-expiring refresh tokens
Authentication
OAuth Flow Comparison by System
System
S2S Flow
User-Context Flow
Token Lifetime
Refresh Token?
Certificate Required?
Salesforce
JWT Bearer
Auth Code (Web Server)
Session timeout (2h default)
No (JWT) / Yes (Auth Code)
Yes (X.509)
SAP S/4HANA Cloud
Client Credentials
SAML Bearer Assertion
3600s (1h)
Yes (SAML flow)
Optional (mTLS)
Oracle Fusion Cloud
Auth Code (via IDCS)
Auth Code + PKCE
3600s (1h)
Yes (7-day)
Optional (JWT assertion)
Dynamics 365
Client Cred + Secret/Cert
Auth Code + PKCE
60-90 min
Yes (until revoked)
Recommended over secrets
NetSuite
OAuth 2.0 M2M
Auth Code + PKCE
3600s (1h)
Yes (7-day default)
Yes (RSA for M2M)
Workday
Refresh Token (non-expiring)
Auth Code
Until revoked
Yes (non-expiring)
Optional (JWT bearer)
Authentication Gotchas
Salesforce JWT Bearer flow requires a connected app with pre-uploaded X.509 certificate. Admin must pre-authorize the app. Self-signed certs for dev; CA-signed for production. [src1, src6]
SAP S/4HANA Cloud requires a Communication Arrangement per API scenario. No wildcard OAuth scopes. [src2, src7]
Oracle Fusion Cloud token endpoint URLs change during IDCS-to-OCI-IAM migration. Use discovery document instead of hardcoded URLs. [src8]
Dynamics 365 client secrets expire after max 24 months. Certificate-based auth avoids this. Microsoft recommends certificates over secrets. [src3]
NetSuite TBA (OAuth 1.0) cannot create new integrations after 2027.1. OAuth 2.0 M2M requires RSA certificate. [src4]
Workday refresh tokens can be non-expiring, but ISU termination breaks all integrations using that ISU immediately. [src5]
Constraints
Salesforce: JWT Bearer flow does not return a refresh token. Connected app must be pre-authorized by admin for the integration user profile.
SAP S/4HANA Cloud: Communication Arrangements are mandatory. OAuth scopes are tied to specific communication scenarios, not the OAuth client.
Oracle Fusion Cloud: Basic auth deprecated for new integrations as of 2025. Must create Confidential Application in IDCS before OAuth works.
Dynamics 365: Application users require custom security role. Client secrets have 24-month maximum expiration.
NetSuite: No new TBA integrations after 2027.1 for SOAP, REST, or RESTlets. M2M requires RSA certificate.
Workday: Every integration requires domain security policy configuration for the ISU's security group. ISU termination breaks integrations instantly.
Salesforce access tokens are org-scoped for JWT flow -- all API calls execute under the integration user's permissions. [src1]
SAP BTP OAuth tokens are bound to a specific subaccount and communication arrangement. [src2]
Dynamics 365 tokens include audience claim (aud) that must match the environment URL exactly. [src3]
NetSuite OAuth 2.0 tokens are bound to the integration record and account ID. [src4]
Error Handling & Failure Points
Common Error Codes
Error
System(s)
Meaning
Resolution
invalid_grant
All
Token request rejected
Regenerate JWT assertion or refresh token
invalid_client
All
Client credentials rejected
Verify credentials; check secret expiration
INVALID_SESSION_ID
Salesforce
Access token expired
Generate new JWT and request new token
AADSTS700027
Dynamics 365
Certificate validation failed
Upload correct cert; check thumbprint
AADSTS7000215
Dynamics 365
Invalid client secret
Generate new secret or use certificate
USER_EXCEPTION
NetSuite
Auth failed
Check integration record; migrate to OAuth 2.0
401 - invalid_token
Workday
Token expired or ISU deactivated
Request new token; verify ISU is active
Failure Points in Production
Salesforce session timeout change: Admins can reduce from 2h to 15min. Fix: Generate fresh JWT per batch; implement expiry checking. [src1]
SAP Communication Arrangement deactivation: Maintenance/system copy invalidates all OAuth tokens. Fix: Monitor arrangement status; set up alerts. [src2]