You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在新创建的Salesforce Scratch Org中使用主组织Connected App的问题

CI/CD流程中Scratch Org的JSForce连接问题

需求

在CI/CD流程中完成:创建Scratch Org → 通过JSForce连接并执行Node服务查询 → 销毁Scratch Org

已尝试方案及问题

  • 方案1:通过CI/CD用主组织元数据新建Connected App
    • 问题:无法自动获取应用ID和密钥
  • 方案2(优先尝试):让Scratch Org用户使用主组织的Connected App
    • 问题:应用已在用户「OAuth Apps」列表中,但用Connected App凭证+用户凭证访问时返回invalid grant
  • 方案3:不使用Connected App
    • 问题:无法自动获取安全令牌附加到密码中

主组织Connected App配置

<isAdminApproved>true</isAdminApproved>
<isConsumerSecretOptional>false</isConsumerSecretOptional>
<isIntrospectAllTokens>false</isIntrospectAllTokens>
<isSecretRequiredForRefreshToken>false</isSecretRequiredForRefreshToken>
<oauthPolicy>
    <ipRelaxation>BYPASS</ipRelaxation>
    <refreshTokenPolicy>infinite</refreshTokenPolicy>
</oauthPolicy>
<permissionSetName>Synchronizer Access</permissionSetName>
<profileName>System Administrator</profileName>

注:必须将isAdminApproved设为true才能正常工作,主组织已配置应用访问权限。

额外问题

执行sf org create scratch返回的访问令牌无法用于JSForce连接,疑似不具备API访问用途。

Scratch Org配置

"features": ["EnableSetPasswordInApi", "API", "AuthorApex"],
  "settings": {
    "lightningExperienceSettings": {
      "enableS1DesktopEnabled": true
    },
    "apexSettings": {
      "enableCompileOnDeploy": true
    },
    "OauthOidcSettings": {
      "blockOAuthUnPwFlow": false
    }
  }

解决方案

1. 直接使用Scratch Org创建时的会话令牌连接JSForce

sf org create scratch返回的accessToken和instanceUrl是有效的API会话凭证,无需Connected App即可直接连接,这是CI/CD中最便捷的方式:

const jsforce = require('jsforce');

// 从CI/CD环境变量读取sf返回的参数
const conn = new jsforce.Connection({
  instanceUrl: process.env.SCRATCH_INSTANCE_URL,
  accessToken: process.env.SCRATCH_ACCESS_TOKEN
});

// 执行查询示例
conn.query('SELECT Id, Name FROM Account', (err, result) => {
  if (err) throw err;
  console.log('查询结果:', result.records);
});

提示:创建Scratch Org时可以用--json参数输出结构化结果,方便CI/CD工具提取环境变量:

sf org create scratch -f config/project-scratch-def.json --json > scratch-org-info.json

2. 修复方案2中的invalid grant问题

如果必须使用主组织的Connected App,排查以下几点:

  • 确保权限分配同步:Scratch Org用户必须分配Connected App配置中指定的Synchronizer Access权限集或System Administrator配置文件。CI/CD中添加命令自动分配:
    sf assign set-permission-set -n "Synchronizer Access" -u <scratch-org-username>
    
  • 验证OAuth设置:确认Scratch Org的blockOAuthUnPwFlow确实为false,可以用sf org display -u <scratch-org-username> --verbose检查配置。
  • 获取安全令牌:若使用密码+令牌方式,创建Scratch Org时设置密码后,通过sf org generate token -u <scratch-org-username>获取安全令牌,再组合密码(密码+令牌)用于JSForce的用户名密码登录:
    const conn = new jsforce.Connection();
    conn.login(username, `${password}${securityToken}`, (err) => {
      if (err) throw err;
      // 执行查询
    });
    

3. 销毁Scratch Org

流程结束后执行销毁命令:

sf org delete scratch -u <scratch-org-username> -p

内容的提问来源于stack exchange,提问作者charlescol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:55:00