Salesforce 主流认证方式、流程、适用场景

Salesforce 主流认证方式、流程、适用场景

核心前提:绝大多数外部系统对接Salesforce,底层基于 Connected App(连接应用) ,配置Client‑ID / Client‑Secret、OAuth Scope,作为授权基础。

分为两大类:OAuth2.0系列(外部App访问SF) ;SF向外调用外部系统(Named Credentials / External Credentials);还有传统用户名密码、SSO。

一、OAuth 2.0 五种主流Flow(外部App调用Salesforce API,重点)

1、Web‑Server Flow(Authorization Code 授权码流程,推荐)

流程

  1. 用户浏览器跳转Salesforce授权页面,用户输入账号密码登录、同意授权;
  2. SF重定向回调URL,返回Authorization Code授权码;
  3. 后端服务拿code + ClientID+ClientSecret,去兑换 access_token + refresh_token;
  4. 后端携带access_token调用Salesforce API;refresh_token用于过期刷新令牌。

适用场景 :

✅ 有后端服务的Web应用;终端商户用户登录外部App,以该商户身份读取自己Salesforce数据(商户App最典型场景)。

商户在外部App登录,只能看自己Account/Case,受用户权限、共享集控制。

特点

  • 密钥保存在后端,不会暴露前端;安全;支持refresh_token长期访问;
  • 移动端无后端时用 Authorization Code + PKCE(去掉Client‑Secret,防止授权码被劫持)。

✨场景:餐厅老板登录商户App,查看自己的商户信息、工单,优先 Web‑Server + PKCE。

2、JWT Bearer Token Flow(JWT证书流程,服务‑对‑服务M2M)

流程

  1. Connected App上传数字证书(私钥保存在外部系统,公钥上传SF);
  2. 外部后端生成JWT,携带用户名、iss(clientId),用私钥签名;
  3. 发给Salesforce token端点,直接换取access_token;不需要人工交互登录界面。

适用场景

✅ 后台服务、定时任务、ETL、CDC监听;无真实终端用户介入,系统账号跑批;SFDX命令行也是JWT。

例:后台同步Salesforce数据到外部App数据库,后台服务账号拉取数据。

特点

  • 完全无弹窗、无人工登录;证书管控;不支持refresh_token,每次重新申请token;
  • 风险:私钥泄露则可冒充集成用户,要严格保管私钥。

3、Client Credentials Flow(客户端凭证,较新M2M)

流程

  1. Connected App开启该流程,预先指定一个"Run‑As"集成用户;
  2. 外部直接传Client‑ID + Client‑Secret,拿到access_token;
  3. API全部以配置好的Run‑As用户权限执行。

适用场景

✅ 服务‑对‑服务,后台同步;不需要代表某个终端登录用户,统一集成账号访问。

区别JWT:不用证书,只用密钥;缺点密钥泄露风险更高。

4、User‑Agent Flow(Implicit 隐式流,不推荐生产)

流程 :浏览器直接拿到access_token放在URL #hash片段,没有授权码兑换步骤,没有refresh_token 。

适用 :纯前端SPA浏览器demo;禁止生产使用 。

风险:token暴露浏览器地址栏,容易泄露令牌。

5、Username‑Password Flow(用户名密码流,已废弃,新Org默认关闭)

流程 :外部直接传SF用户名+密码+安全Token换取token。

❌ 缺点:绕过MFA,密码暴露第三方客户端,不支持Sso,官方不建议生产,Winter'27会淘汰。


二、Salesforce向外调用外部系统(Apex Callout场景)

即Salesforce作为客户端,调用POS外部API(Opportunity关闭开通商户账号场景)

Named Credentials(命名凭证)+ External Credentials外部凭证

流程

  1. External Credentials:保存认证方式(Basic / OAuth/JWT/mTLS);
  2. Named Credentials:保存目标API地址,关联External Credentials;
  3. Apex callout直接写callout to NamedCredential,代码中完全不写账号密码、token,平台自动完成鉴权。

适用场景:Apex Callout向外调用第三方REST接口;把认证配置集中在Setup,代码无硬编码,便于轮换密钥。

面试话术:SF要callout调用外部POS接口,优先使用Named Credentials,避免硬编码密钥。

三、SSO 单点登录(SAML / OpenID Connect)

SAML SSO :企业IdP(Okta/AzureAD)作为身份源,用户通过企业账号登录Salesforce,不需要SF原生密码。

适用:内部员工统一身份管理;企业域集成。

OpenID Connect:第三方充当IdP,登录Salesforce;或者Salesforce充当IdP,登录外部App。

📊选型对照表(面试可以直接口述)

认证方式 是否需要用户交互 典型使用场景 岗位是否匹配
Web‑Server(+PKCE) ✅ 用户登录 商户App终端用户登录,访问自己数据 高(商户登录外部App)
JWT Bearer ❌无交互 后台批处理、CDC监听,M2M同步 高(后台拉取SF数据同步到外部DB)
Client Credentials ❌无交互 M2M服务对接,统一集成账号 中
User‑Agent ✅浏览器 Demo SPA,不建议生产 ❌不使用
Username‑Password ❌无交互 遗留系统,官方废弃 ❌禁止生产
Named Credentials ‑ SF Apex Callout调用POS外部API 高(SF调POS开通商户)

✨针对业务场景口述(中文,面试官问认证选型)

我们的业务是外部商户App从Salesforce拉取数据展示,分两类场景:

  1. 终端餐厅商户登录App查看自己数据 :选用Web‑Server OAuth + PKCE;商户在浏览器授权登录,每个API调用携带该商户身份,配合with sharing行级共享,保证商户只能看到自己Account和Case。
  2. 后台服务批量同步数据(CDC消费、预缓存数据),无终端用户登录:选用JWT Bearer Flow,使用集成系统账号做服务对服务调用。

如果Salesforce这边Apex需要反向调用POS接口开通商户账号,会用Named Credentials托管鉴权信息,不在代码硬编码密钥。

🇺🇸英文精简口述(美国技术面试)

For merchant external‑app scenario, two main authentication patterns apply.

When end‑merchant users log into the app to view their own account and case data, we use OAuth 2.0 Web‑Server flow with PKCE . Each API request runs under merchant user context, and Apex uses with sharing to enforce record‑level isolation.

For background server‑to‑server sync jobs without end‑user interaction, JWT Bearer token flow is preferred for M2M integration.

When Salesforce Apex needs to call out to POS backend, I leverage Named Credentials to centralize auth configuration and avoid hard‑coding secrets inside Apex code.

高频追问&回答

Q:JWT vs Client Credentials怎么选?

JWT使用数字证书,安全性更高,适合生产M2M;Client Credentials依靠Client Secret密钥,如果密钥泄露风险更高。优先JWT做生产后台集成。

Q:Web‑Server为什么要PKCE?

PKCE保护公开客户端(移动端、SPA),防止授权码被拦截劫持,不需要保存Client Secret在客户端。

Q:access_token过期怎么办?

Web‑Server拿到refresh_token,用refresh_token刷新access_token;JWT没有refresh_token,需要重新签名申请新token。

Q:Connected App最重要配置?

OAuth scope:api访问API,refresh_token offline_access获取刷新令牌;回调URL;证书(JWT场景);IP策略、会话超时策略。

相关推荐
LOVE️YOU4 小时前
Python 中 Tuple 为什么有时可 Hash,有时不可 Hash?
开发语言·python·哈希算法
李永奉4 小时前
C语言-指针函数与函数指针及回调函数的使用
c语言·开发语言
小oo呆4 小时前
【学习心得】迭代器和可迭代对象
开发语言·python
AC赳赳老秦4 小时前
采集行为合规自检:OpenClaw 自动校验 robots 协议与采集频率,规避违规采集风险
java·开发语言·c++·python·php·deepseek·openclaw
钱栈up5 小时前
mvn compile 卡死在 javac 阶段:一次类型不匹配的排查与修复
java·开发语言
迅猛龙办公室5 小时前
Python输出当前计算机的系统日期和时间
开发语言·前端·python
杨丰玮4185 小时前
C语言基础知识(一)————各类符号的含义与输入输出库(stdio)
c语言·开发语言
程序猿编码5 小时前
工业视觉多任务方案:可编程梯度信息视觉框架,训练评估 + C++ 部署完整实战
开发语言·c++·视觉·推理引擎
言乐66 小时前
Python实现语音审核模型
开发语言·python·django·virtualenv·pygame