Registering the Service Provider Today
Module 3 of 6 in the chapter Salesforce as the Identity Provider, chapter 7 of Securing Salesforce: Identity and Access. Each module stands on its own.
The question this module answers: In the identity provider org, how do you tell Salesforce about the app it will vouch for?
The step that changed
Section titled “The step that changed”Module 2 walked the dance. Step 6 was the one where you go back to the identity provider org and register the service provider. When I build it live, it’s the quickest step: a few fields, the two addresses pasted in, the Federation ID chosen, a profile given access. All I need is a couple of pieces of information back from the service provider.
The pieces haven’t changed. The screens have.
What the identity provider needs to know
Section titled “What the identity provider needs to know”Whatever the tool, the identity provider needs four things from the service provider (S7):
- The Entity ID: the service provider’s unique name. For a Salesforce org, it’s on its single sign-on setting’s Endpoints, usually its My Domain address.
- The address for answers: the Assertion Consumer Service URL, where Salesforce sends the SAML response. Also on the Endpoints.
- The subject type: what the service provider expects to find in the assertion to name the person. In the lab, the Federation ID.
- A certificate, only if the service provider signs its requests. More on that below: it’s the one people get wrong.
Those are chapter 6’s pairs, seen from the other side.
Two ways to register it
Section titled “Two ways to register it”Salesforce gives two frameworks for it: an external client app or a connected app. In its own words, “The external client apps framework is the new generation of the connected apps framework” (S2).
The connected app is the one in my videos, and many orgs have them today. They keep working. But since Spring ‘26, creating a new connected app is turned off by default in new orgs, in Setup and through the Metadata API, and needs a request to Salesforce Support (S8). And Salesforce says that “In future releases, Salesforce Support won’t be able to enable the creation of new connected apps” (S8).
So for anything new, it’s an external client app. Here’s the part to know: “For SAML, the external client apps framework currently supports only Metadata API configuration” (S2). There’s no SAML page to fill in. You describe the app in files and deploy them.
Three small files
Section titled “Three small files”A SAML-enabled external client app is three pieces of metadata (S4):
- The app (
ExternalClientApplication): its name, a contact email, anddistributionStateLocal. It has to be Local, because “External client apps with SAML configurations can’t be packaged or distributed” (S4). - Its policies (
ExtlClntAppConfigurablePolicies): which plugins the app uses. SAML on. Turning plugins on turns them all on unless you turn each one off (S12), so OAuth, mobile and the rest are set off by name. - Its SAML policies (
ExtlClntAppSamlConfigurablePolicies): the values from the service provider.
You put them in a small Salesforce DX project with a package.xml that lists all three, and deploy them with the Salesforce CLI, sf project deploy start --manifest package.xml. To check, retrieve them back (S4). To change anything, change the file and deploy all three again: “You can’t deploy a single component” (S4). The practice gives you the files, with a placeholder for each value.
The SAML file, value by value
Section titled “The SAML file, value by value”Here’s the third file for the lab, with Priya’s service provider org in it:
<ExtlClntAppSamlConfigurablePolicies xmlns="http://soap.sforce.com/2006/04/metadata"> <externalClientApplication>ServiceProviderOrg</externalClientApplication> <label>ServiceProviderOrgSaml</label> <entityUrl>https://MyDomainName.my.salesforce.com</entityUrl> <acsUrl>https://MyDomainName.my.salesforce.com?so=00Dx00000000001</acsUrl> <subjectType>FederationId</subjectType> <nameIdFormat>Unspecified</nameIdFormat> <signingAlgorithmType>SHA256</signingAlgorithmType> <commaSeparatedPermissionSet>0PSx00000000001</commaSeparatedPermissionSet></ExtlClntAppSamlConfigurablePolicies>Read it against chapter 6, module 3. Every pair has its other half here.
entityUrlis the service provider’s Entity ID, “a globally unique ID that Salesforce uses to recognize the service provider” (S5).acsUrlis its address for answers, “the endpoint where the service provider receives SAML responses from Salesforce” (S5).subjectTypesays what goes in the assertion to name her. Salesforce can send the username, the Federation ID, the 15-character user ID, a custom field, or a persistent ID (S5). The lab usesFederationId, because both users carry E10442.nameIdFormatis the format of that name.Unspecifiedis the default; take the value from the service provider (S5).signingAlgorithmTypeis how Salesforce signs. It signs both the response body and the assertion (S5). Use SHA-256.issuerisn’t in the file, on purpose. Left out, it’s your My Domain (S5), which is exactly what the service provider org imported from the metadata. Set it only for something else, such as an Experience Cloud site (module 5).
One more value lives on the user, not the app. With the Federation ID as the subject type, “you must provide a Federation ID in the user’s Salesforce settings” (S6): Priya, in the identity provider org, gets E10442 too.
The one people get wrong
Section titled “The one people get wrong”There’s a certificate field, and it looks as if it belongs here. It does, but not the way you’d think. It’s the service provider’s certificate, the one it uses to sign its SAML requests, and you include it “only if your service provider signs SAML requests”. Then “Salesforce requires that all SAML requests from the service provider are signed. If you don’t include a certificate, Salesforce accepts all SAML requests, whether or not they’re signed” (S5).
So it isn’t the certificate that makes single sign-on work. That’s Salesforce’s own, on the Identity Provider page, and the service provider already has it from the metadata. This one is an extra check on the requests coming in.
Test knowledge. In my experience, know which certificate is whose. When Salesforce is the identity provider, it signs with its own certificate, and the service provider holds that one. The service provider’s certificate, if it’s registered at all, only checks the service provider’s signed requests.
Who may go
Section titled “Who may go”The identity provider decides who it will vouch for into this app. In the SAML file, that’s commaSeparatedPermissionSet or commaSeparatedProfile: IDs, separated by commas. Salesforce recommends permission sets over profiles (S5). In the lab, you make one permission set, give it to Priya, and put its ID in the file.
What Setup shows, and what it doesn’t
Section titled “What Setup shows, and what it doesn’t”After the deploy, the app is in External Client App Manager in Setup. But “you can’t view or edit its SAML configuration information from Setup” (S4). The file is the only place the values live.
For an architect, that cuts both ways. The configuration is in source control, reviewed and deployed like any other metadata, and it goes to each org the same way. But an admin looking at Setup during an outage can’t see the values. So keep the files where the people who support single sign-on can find them, beside the six pairs you wrote down in chapter 6.
Two more facts to plan around. Local external client apps aren’t copied when a sandbox is refreshed (S8), as module 1 said. And Salesforce’s pages disagree on editions. The page for SAML external client apps lists the Developer, Performance and Unlimited Editions (S4); the page for Salesforce as a SAML identity provider, which covers both external client apps and connected apps, adds Enterprise (S13). If your org is Enterprise Edition, check the current page for your org before you plan on a SAML external client app.
What’s next
Section titled “What’s next”Module 4: the first login, watched.
What an architect decides here
Section titled “What an architect decides here”- External client app or connected app: new work in an external client app; a plan for the connected apps you already have.
- The subject type, and the one value both sides keep for each person.
- Who may go, by permission set.
- Where the files live, who can deploy them, and who can read them in an outage.
- Whether the service provider signs its requests, and so whether its certificate is registered.
Explore
Section titled “Explore”- Integrate Service Providers as SAML-Enabled Apps (opens in a new tab) (Salesforce Help, Winter ‘27; checked 2026-11-07)
- Integrate a SAML SSO Service Provider as an External Client App (opens in a new tab) (Salesforce Help, Winter ‘27; checked 2026-11-07)
- ExtlClntAppSamlConfigurablePolicies (opens in a new tab) (Metadata API Developer Guide; checked 2026-11-07)
- New Connected Apps Can No Longer Be Created in Spring ‘26 (opens in a new tab) (Salesforce Help; checked 2026-11-07)
