Skip to content

The Integration User, or a Chosen Person

Module 4 of 7 in the chapter SSO or OAuth? Choosing the Mechanism, chapter 5 of Securing Salesforce: Identity and Access. Each module stands on its own.

The question this module answers: When a process reaches Salesforce with no one at the keyboard, whose name does it run under, and which flow follows from that?

Back to the whiteboard one last time. System A, Salesforce, the identity provider, and Priya’s browser. In module 3, system A called Salesforce for Priya, with Priya there to log in and approve.

Now take the browser away. It’s two in the morning. Nobody’s at the keyboard. System A still needs to reach Salesforce: a nightly load, an export, a middleware server moving orders.

Only arrows from the browser, then the little line Three zones: Priya, other systems, and Salesforce. First frame: Priya's browser opens system A, an expense app, and opens Salesforce; every arrow starts at the browser. Second frame: an identity provider, which shows the login screen, joins the other systems, and the browser signs in there once: single sign-on. Third frame: a navy line, the little line, from system A to Salesforce: system A calls the API for Priya, which needs OAuth. Fourth frame: the browser is replaced by "no one at the keyboard; Priya isn't there", in amber; its arrows are gone, and system A calls the API as an integration user, or as Priya. Footnote: only arrows from the browser is single sign-on; one system calling another is OAuth. PRIYA OTHER SYSTEMS SALESFORCE The identity provider shows the login screen System A an expense app, say Salesforce No one at the keyboard Priya isn't there calls the API: as an integration user, or as Priya Only arrows from the browser: single sign-on. One system calling another: OAuth. HOW TO READ IT the little line: one system calling another no person there © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

There’s no one to show a login page to, so no redirect, no single sign-on, and no web server flow. It’s OAuth, and the first thing to decide is whose name the work runs under.

First ask: should we just use the integration user?

Section titled “First ask: should we just use the integration user?”

That’s always my first question. If all you’re going to do is share one user for this integration, the answer is simple.

An integration user is a Salesforce user set up for one integration, not for a person. Salesforce’s own advice is one user for every integration, so each one gets only the data it needs, and you can trace what each one did (S8). The Salesforce Integration user license exists for this: its Minimum Access - API Only Integrations profile lets the user work only through the API (S8).

The flow is the client credentials flow. The app exchanges its own credentials, a consumer key and a consumer secret, for an access token, and Salesforce runs everything as the integration user you assigned (S5). No person, no redirect, no refresh token.

Two things follow from that choice.

  • Every change says “Integration User”. All your sharing and record access is the integration user’s, and Last Modified By and Created By are the integration user, not the person the change was for.
  • The secret is the key to the door. Salesforce warns that “any person or app that has access to your external client app’s consumer key and consumer secret can get an access token” (S5). Keep it in a vault and change it regularly.

There’s also an old way you’ll still find: the username-password flow, where the app sends the integration user’s username and password. You shouldn’t use it, but you should know it’s there. It’s blocked by default in orgs created since Summer ‘23, and Salesforce retires it for connected apps on February 20, 2027 (S1, S2). For server-to-server work, its replacement is client credentials (S2).

Sometimes the integration user isn’t enough. The requirement says the change must be made as Priya: her access, her name on the record. But Priya isn’t around. We just need system A going to Salesforce, but we want to go as Priya.

That needs a much stronger trust, and there are two ways to build it.

Remember how single sign-on built its trust? A digital certificate, installed in advance. The JWT bearer flow does the same thing. System A holds a private key, and its certificate is installed in Salesforce. System A writes a short message, a JWT (JSON Web Token), that says, in effect, “let them in as Priya”, signs it, and sends it to Salesforce. Salesforce checks the signature against the certificate and issues an access token as Priya, at once (S6).

It’s like a golden pass. You hand it over, it’s been properly stamped, and inside it says who to let in. No human involvement. So this is very powerful, and dangerous. Salesforce does require the app to be approved in advance: with Admin approved users are pre-authorized, only the users whose profiles and permission sets you allow can be named in the pass (S6). Within that group, system A can become anyone.

So you set it up only when the two systems are very trusted: both are your company’s own systems, and you’d trust system A with anyone’s identity.

The SAML bearer assertion: when security says no

Section titled “The SAML bearer assertion: when security says no”

Here’s a story from a project I worked on. The two systems were Salesforce and SAP, and every request into SAP had to go as a specific user. JWT would have meant that Salesforce could go into SAP and pretend to be anyone. Do you think that made the security people happy? It didn’t.

But they did have a single sign-on identity provider that both sides already trusted. So the middleware asked the identity provider for a SAML assertion for that one user, and presented the assertion to SAP. The platform event that started it carried only the username. No passwords: a password in every event would have been in reach of anyone who could read the events.

The pattern is the point. If you can’t give a system the power to be anyone, look for an identity provider that’s already trusted, and present an assertion instead, the same signed statement single sign-on uses. In Salesforce, that’s the SAML bearer assertion flow: the app posts a signed SAML assertion, and Salesforce checks the signature against the certificate registered for the app, and “the audience, issuer, subject, and validity of the assertion” (S7). Those are the same checks from chapter 4, module 6.

Salesforce also has a SAML assertion flow, a different thing, for orgs already using SAML single sign-on that want to reach the API the same way (S1). The names are close. Chapter 11 sorts them out.

So if you ever hear a requirement to use a specific user, and there’s no person directly involved, stop and ask why. Often the integration user is enough. If it truly has to be a person, you can set up the tightest one possible, JWT bearer, or you can ask: do you have an identity provider around, and can I get an assertion from it?

On the grid of every way to sign in (module 6), this module is two sets: a process as the integration user, and a process as a chosen person. Two of the integration user’s doors are closing; see module 6 for the dates.

On the map: a process, with no person there On the map of every way to sign in: A process (OAuth, no person there); Client credentials flow (one user per integration, ch 5, 11); Username-password flow (retiring 2027-02-20, ch 5); SOAP API login() (retiring Summer '27, ch 13); A process (OAuth, acting for someone); JWT bearer flow (the golden pass, ch 5, 11); SAML bearer assertion flow (an assertion from a trusted IdP, ch 5, 11); SAML assertion flow (for orgs already on SAML, ch 11). {"author": "Steve Simpson", "blueprint": "1.0.0", "builder": "standard 1.58.0", "built": "2026-11-03", "id": "DGM-IAM-CD-07", "rights": "\u00a9 2026 Twinshark LLC. All rights reserved.", "template": "cells 0.5.0", "theme": "stevetecharc 1.4.0"} THE SET: WHO SIGNS IN, AND HOW THE MECHANISMS A process, as the integration user OAuth, no person there Client credentials flow one user per integration · ch 5, 11 Username-password flow retiring 2027-02-20 · ch 5 SOAP API login() retiring Summer '27 · ch 13 A process, as a chosen person OAuth, acting for someone JWT bearer flow the golden pass · ch 5, 11 SAML bearer assertion flow an assertion from a trusted IdP · ch 5, 11 SAML assertion flow for orgs already on SAML · ch 11 HOW TO READ IT met in Part 1 (chapters 2 to 5) taught in a later chapter retiring: still in orgs, not for new work © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Two of my 2023 videos go with this module: the JWT bearer flow, and the two SAML flows with nearly the same name. The note under each video says what’s still right and what’s changed since.

STA 3.16 · Salesforce OAuth JWT Bearer Flow Explained · 7:49 · published 2023-10-11 · plays from YouTube when you click it · Watch on YouTube · More videos: Salesforce Identity & Access Videos
STA 3.18 · Salesforce OAuth SAML Bearer Assertion and SAML Assertion Flow · 8:45 · published 2023-10-16 · plays from YouTube when you click it · Watch on YouTube · More videos: Salesforce Identity & Access Videos

Module 5: devices and things, where the device starts it and a person, sometimes, approves.

  • Integration user or a chosen person, for every process, with the reason written down.
  • One integration user per integration, on the Salesforce Integration license where it fits, with only the access it needs.
  • Where the consumer secret lives, and how often it changes.
  • For acting as a person: JWT bearer or the SAML bearer assertion, which users can be named, and which systems are trusted that much.
  • Every username-password integration found and moved before February 20, 2027.