授权

授权是指登录到组织,以便您可以运行需要访问权限的命令 到组织。使用 CLI 命令创建组织也会自动对其进行授权。例如 您授权 Dev Hub 组织允许您创建、删除和管理 Salesforce 临时 组织。在本地计算机上设置项目后,对开发人员中心组织进行授权 在创建临时组织之前。当您运行命令以创建临时组织时, Salesforce CLI 会自动对其进行授权。

您还可以授权其他现有组织(例如沙盒或打包组织)提供 使用 CLI 命令时具有更大的灵活性。

您只能授权一个组织一次。要在开发期间在组织之间切换,请指定 您用于使用 OR 标志登录组织的用户名。 您还可以设置默认组织或使用别名。–target-org–target-dev-hub

在授权组织时,您有一些选择,具体取决于您尝试执行的操作 完成。

  • 最简单的选择是运行 ,其中 打开一个浏览器,您可以在其中输入 Salesforce 凭据。此选项是 正式称为 OAuth 2.0 Web 服务器流程。org login web
  • 对于持续集成 (CI) 或自动化环境,请使用以下命令。此选项的正式名称为 OAuth 2.0 JSON Web 令牌 (JWT) 持有者流。此流程非常适合以下情况 您无法以交互方式登录到浏览器,例如从 CI 脚本登录。org login jwt重要如果您的组织配置了高确定性(升级) 身份验证时,Salesforce 会提示用户验证其身份。这 验证过程意味着您不能将 JWT 流程和 Salesforce CLI 用于 无外设身份验证。
  • 使用浏览器
    授权组织 通过运行 CLI 命令并在自动打开的浏览器中输入您的凭据,使用浏览器授权组织。就是这样!
  • 使用 JWT 流
    授权组织 持续集成 (CI) 环境是完全自动化的,不支持登录浏览器的人工交互性。在这些环境中,您必须使用 JWT 流对组织进行授权。
  • 创建私钥和自签名数字证书 使用该命令授权组织需要数字证书和用于签署证书
    的私钥。您可以使用自己的私钥和证书颁发机构颁发的证书。或者,您可以使用 OpenSSL 创建密钥和自签名数字证书。当您通过登录浏览器对组织进行授权时,使用私钥和证书是可选的。org login jwt
  • 在您的组织
    中创建连接的应用程序 Salesforce CLI 要求您授权的组织中有一个连接的应用程序。连接的应用程序是一个框架,它使外部应用程序(在本例中为 Salesforce CLI)能够使用 API 和标准协议(如 OAuth)与 Salesforce 集成。当您使用命令授权组织时,我们会提供默认连接的应用程序。为了提高安全性,您可以使用“设置”在组织中创建自己的连接应用程序,并使用所选设置对其进行配置。使用命令授权组织时,您需要创建连接的应用程序。org login weborg login jwt
  • 安全地使用默认连接的应用程序
    如果您使用命令授权组织,但未指定标志,则 Salesforce CLI 会在组织中创建一个名为 .但是,其刷新令牌设置为永不过期。作为安全最佳实践,Salesforce 建议组织中的刷新令牌在 90 天或更短时间后过期。另一个最佳安全做法是将访问令牌的过期时间设置为 15 分钟。与刷新令牌类似,默认连接应用中的访问令牌设置为永不过期。若要继续以安全的方式使用此默认连接的应用程序,请配置其策略。org login web–client-idSalesforce CLI
  • 使用现有访问令牌
    当您使用命令授权组织时,Salesforce CLI 会负责生成和刷新所有令牌,例如访问令牌。但有时您希望对现有组织运行一些 CLI 命令,而无需完成整个授权过程。在这种情况下,您需要提供托管要连接到的组织的 Salesforce 实例的访问令牌和 URL。org login
  • 组织的
    授权信息 您可以查看已授权的所有组织以及已创建的临时组织的信息。
  • 注销组织
    出于安全考虑,您可以使用 Salesforce CLI 注销您之前授权的任何组织。如果您不希望其他用户访问您的组织,这种做法会阻止他们访问您的组织。

使用浏览器授权组织

通过运行 CLI 命令并输入您的凭据,使用浏览器授权组织 在自动打开的浏览器中。就是这样!

  1. 打开终端(macOS 和 Linux)或命令提示符 (Windows)。
  2. 运行 org login web CLI 命令。我们建议 使用 –alias 标志使其易于引用 组织稍后。sf org login web --alias my-org如果您希望组织 是接受该标志的命令的默认值。如果要授权 Dev Hub 组织,请改用该标志。有关示例,请参阅 org login web 命令。–set-default–target-org–set-default-dev-hub
  3. 在打开的浏览器窗口中,使用 Salesforce 登录名登录您的组织 凭据。单击允许,这将允许 Salesforce CLI 访问 您的组织。
  4. 关闭浏览器窗口。您的组织现已获得授权!

如果用于登录组织的 URL 不是默认 (),请更新项目配置文件 (sfdx-project.json)中。 将该选项设置为增强的 My Domain 登录 URL。为 例:

login.salesforce.comsfdcLoginUrl

"sfdcLoginUrl" : "https://MyDomainName.my.salesforce.com"

这 示例是针对 沙盒。

"sfdcLoginUrl" : "https://MyDomainName--SandboxName.sandbox.my.salesforce.com"

或者 可以使用 的标志来指定 URL。此值将覆盖 您在 sfdx-project.json 文件中指定的登录 URL。为 例:–instance-urlorg login web

sf org login web --alias my-hub-org --instance-url https://exciting.sandbox.my.salesforce.com

注意

我们 建议您使用增强的 My Domain 登录 URL,因为它不受组织的影响 更改组织的 Salesforce 实例的迁移。请确保使用结束的版本 而不是您在 Lightning Experience ()。验证 有效的 My Domain URL,在“设置”中,输入“快速” “查找”框,然后选择“我的域”。my.salesforce.com.lightning.force.comMy Domain

此外,您的组织 需要对 Salesforce CLI 进行授权才能连接应用程序。我们提供默认 名为 的连接应用程序。如果您需要更多 安全或控制,例如设置刷新令牌超时或指定 IP 范围, 创建自己的连接应用。您还可以将默认连接的应用程序配置为更多 安全。Salesforce CLI

使用 JWT 流程授权组织

持续集成 (CI) 环境是完全自动化的,不支持 登录浏览器的交互性。在这些环境中,必须使用 JWT 流 对组织进行授权。

JWT 流程需要数字证书(也称为数字签名)来对 JWT 请求。您可以使用自己的证书,也可以使用 OpenSSL。

重要

如果您的组织配置了高确定性(升级) 身份验证时,Salesforce 会提示用户验证其身份。此验证 进程意味着您不能将 JWT 流程和 Salesforce CLI 用于无头 认证。

  1. 如果您没有自己的私钥和数字证书,则可以使用 OpenSSL 创建密钥和自签名证书。在此任务中,假定私钥文件名为 server.key,数字证书名为 server.crt。
  2. 创建连接的应用,并将其配置为 Salesforce DX的。此任务包括上载 server.crt 数字证书文件。保存连接的应用时记下使用者密钥 因为你以后需要它。
  3. 打开终端(macOS 和 Linux)或命令提示符 (Windows)。
  4. 运行 org login jwt CLI 命令。我们建议 使用 –alias 标志使其易于引用 组织稍后。使用标志(JWT 私钥文件的路径)指定已连接应用中的使用者密钥 (server.key) 和组织的用户名。 为 例:–client-idsf org login jwt --client-id 04580y4051234051 --jwt-key-file /Users/jdoe/JWT/server.key --username jdoe@myorg.com --alias my-hub-org如果您希望组织 是接受该标志的命令的默认值。如果要授权 Dev Hub 组织,请改用该标志。有关示例,请参阅 org login jwt 命令。–set-default–target-org–set-default-dev-hub

您可以使用相同的使用者密钥和私钥文件对临时组织进行授权,该文件 你曾经授权其关联的 Dev Hub 组织。请参阅使用 JWT 流程授权临时组织

如果用于登录组织的 URL 不是默认 (),请更新项目配置文件 (sfdx-project.json)中。 将该选项设置为增强的 My Domain 登录 URL。为 例:login.salesforce.comsfdcLoginUrl

"sfdcLoginUrl" : "https://MyDomainName.my.salesforce.com"

这 示例是针对 沙盒。

"sfdcLoginUrl" : "https://MyDomainName--SandboxName.sandbox.my.salesforce.com"

或者 您可以使用命令的标志来指定 URL。此值 覆盖您在 sfdx-project.json 文件中指定的登录 URL。 为 例:–instance-urlorg login jwt

sf org login jwt --client-id 04580y4051234051 --jwt-key-file /Users/jdoe/JWT/server.key --username jdoe@myorg.com --alias my-hub-org --instance-url https://mydomain--mysandbox.sandbox.my.salesforce.com

注意

我们 建议您使用增强型 My Domain 登录 URL,因为它不受组织的影响 更改组织的 Salesforce 实例的迁移。请确保使用结束的版本 而不是您在 Lightning Experience ()。验证 有效的 My Domain URL,在“设置”中,输入“快速” “查找”框,然后选择“我的域”。my.salesforce.com.lightning.force.comMy Domain

  • 使用 JWT 流程
    授权临时组织 如果使用该命令授权开发人员中心组织,则可以使用相同的数字证书和私钥来授权关联的临时组织。此方法适用于持续集成 (CI) 系统,这些系统必须在创建临时组织后对其进行授权,但无权访问临时组织的访问令牌。org login jwt

另见

  • Salesforce CLI 命令参考:org login jwt
  • 创建私钥和自签名数字证书
  • 在组织中创建连接的应用程序
  • Salesforce DX 项目配置
  • Salesforce 帮助:增强型域
  • Salesforce 帮助:设置多重身份验证

使用 JWT 流程授权临时组织

如果使用该命令对开发人员中心组织进行授权,则可以使用相同的数字证书和私钥来授权 关联的 Scratch 组织。此方法对于必须 在创建临时组织后授权它们,但无权访问临时组织的访问权限 令 牌。

org login jwt

在开始之前,我们假设:

  • 你之前使用该命令授权了 Dev Hub 组织。org login jwt
  • 授权 Dev Hub 组织时使用的私钥文件可在 /Users/jdoe/JWT/server.key 中访问。
  • 您已创建一个临时组织,并拥有其管理用户的用户名,例如 test-wvkpnfm5z113@example.com。
  • 您知道临时组织的实例 URL。如果你不知道,你可以查询你的开发人员 中心组织。为 例:sf data query --target-org my-dev-hub --query "SELECT SignupUsername,LoginUrl FROM ScratchOrgInfo WHERE SignupUsername='test-wvkpnfm5z113@example.com'"
  1. 从在开发人员中心创建的已连接应用中复制使用者密钥 组织。
    1. 登录到开发人员中心组织。
    2. 在“设置”中,在“快速查找”框中输入“应用程序管理器”以获取 到 Lightning Experience 应用程序管理器。
    3. 在应用列表中找到已连接的应用,然后单击右侧操作下拉列表的下拉菜单,然后选择“查看”。
    4. 在“API(启用 OAuth 设置)”部分中,单击“管理使用者” 详如果出现提示,请输入验证码以验证您的身份 自动发送到您的电子邮件地址。
    5. 将使用者密钥复制到剪贴板。使用者密钥是一长串 数字、字母和字符,例如3MVG9szVa2Rx_sqBb444p50Yj(示例缩短 为清楚起见。
  2. 打开终端(macOS 和 Linux)或命令提示符 (Windows)。
  3. 运行 org login jwt CLI 命令。–client-id 和 –-jwt-key-file 标志值与运行命令时相同 授权 Dev Hub 组织。将 –-username 设置为 临时组织的管理员用户名,并将 —instance-url 设置为临时组织的实例 URL,例如 https://energy-enterprise-2539-dev-ed.scratch.my.salesforce.com。为 例:sf org login jwt --client-id 3MVG9szVa2Rx_sqBb444p50Yj \ --jwt-key-file /Users/jdoe/JWT/server.key --username test-wvkpnfm5z113@example.com \ --instance-url https://energy-enterprise-2539-dev-ed.scratch.my.salesforce.com如果您收到用户未获批准的错误,则表示临时组织 信息尚未复制。请稍等片刻,然后重试。

注意

如果您的临时组织在 Hyperforce 上运行,并且 的值是 非管理员临时组织用户,不能使用 Dev Hub 的数字证书和私有证书 钥匙。要在此方案中授权临时组织,请遵循标准的 JWT 流步骤。–usernameorg login jwt

创建私钥和自签名数字证书

使用命令授权组织 需要数字证书和用于对证书进行签名的私钥。你可以使用 您自己的私钥和证书颁发机构颁发的证书。或者,您可以 使用 OpenSSL 创建密钥和自签名数字证书。使用私钥和 当您通过登录浏览器对组织进行授权时,证书是可选的。

org login jwt

此过程会生成两个文件:

  • server.key – 私钥。您可以指定此项 文件,当您使用命令授权组织时。org login jwt
  • server.crt – 数字证书。您上传 此文件,当您创建所需的连接应用时。
  1. 打开终端(macOS 和 Linux)或命令提示符 (Windows)。
  2. 如有必要,请在计算机上安装 OpenSSL。要检查您的计算机上是否安装了 OpenSSL,请在 macOS 或 Linux 上运行命令,或者在 窗户。whichwherewhich openssl
  3. 创建一个用于存储生成的文件的目录,并切换到该目录。mkdir /Users/jdoe/JWTcd /Users/jdoe/JWT
  4. 生成一个私钥,并将其存储在名为 server.key 的文件中。openssl genpkey -des3 -algorithm RSA -pass pass:SomePassword -out server.pass.key -pkeyopt rsa_keygen_bits:2048openssl rsa -passin pass:SomePassword -in server.pass.key -out server.key您可以删除 server.pass.key 文件 因为你不再需要它。
  5. 使用 server.key 文件生成证书签名请求。将证书签名请求存储在名为 server.csr 的文件中。输入有关您的信息 公司在出现提示时。openssl req -new -key server.key -out server.csr
  6. 从 server.key 和 server.csr 文件生成自签名数字证书。 将证书存储在名为 server.crt 的文件中。openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt

现在创建一个自定义连接的应用程序,然后 将数字证书上传到其中。

在组织中创建连接的应用程序

Salesforce CLI 要求您授权的组织中有一个连接的应用程序。一个互联的 app 是一个框架,它使外部应用程序(在本例中为 Salesforce CLI)能够 使用 API 和标准协议(如 OAuth)与 Salesforce 集成。我们提供默认 连接的应用程序,当您使用命令授权组织时。为了提高安全性,您可以在组织中创建自己的连接应用程序 使用设置并使用您选择的设置对其进行配置。您需要创建一个 使用命令授权组织时连接的应用程序。

org login weborg login jwt

注意

标记为 JWT 必需的步骤仅在创建 连接的应用程序与命令一起使用。在 在这种情况下,您还需要一个包含数字证书的文件,例如 .如果要创建 连接的应用程序与 .org login jwtserver.crtorg login web

  1. 登录到您的组织。
  2. 在“设置”中,在“快速查找”框中输入应用程序管理器”,然后选择“应用程序管理器”。
  3. 在右上角,单击“新建连接的应用”。
  4. 将基本信息更新为 需要,例如连接的应用名称和电子邮件地址。
  5. 选择启用 OAuth 设置
  6. 对于回调 URL,请输入 http://localhost:1717/OauthRedirect。如果端口 1717(默认值)已在本地计算机上使用,请指定 可用一个。然后,通过将属性设置为新端口来更新 sfdx-project.json 文件。例如,如果将 回调 URL 设置为:oauthLocalPorthttp://localhost:1919/OauthRedirect"oauthLocalPort" : "1919"
  7. (JWT 需要)选择使用数字签名
  8. (JWT 需要)单击“选择文件”并上传 包含您的数字证书,例如 server.crt。
  9. 添加以下 OAuth 范围:
    • 通过 API 管理用户数据 (api)
    • 通过 Web 浏览器 (web) 管理用户数据
    • 随时执行请求(refresh_token、 offline_access)
  10. 如果启用,请禁用 代码交换 (PKCE) 扩展所需的证明密钥 支持的授权流程
  11. 点击保存,然后点击继续
  12. 单击“管理使用者详细信息”。如果出现提示,请输入验证码以验证您的身份 自动发送到您的电子邮件地址。
  13. 单击“使用者密钥”旁边的“复制”,因为稍后在以下情况下需要用到它 运行组织登录命令。
  14. 单击“返回”以管理连接的应用程序
  15. 单击“管理”。
  16. 单击编辑策略
  17. 在“OAuth 策略”部分中,对于“刷新令牌策略”字段,单击“刷新令牌在以下时间后过期:”,然后输入 90 天或更短时间。将刷新令牌过期时间设置为最多 90 天是最佳安全性 实践。继续对刷新令牌具有 过期,请使用 or 命令重新授权。org login weborg login jwt
  18. 在“会话策略”部分中,将“超时值”设置为 15 分钟。为访问令牌设置超时是最佳安全做法。Salesforce 命令行界面 通过引用刷新令牌自动处理过期的访问令牌。
  19. (JWT 需要)在“OAuth 策略”部分中,选择“管理员批准” 用户已获得允许用户的预授权,然后单击确定
  20. 点击保存
  21. (JWT 需要)单击“管理配置文件”,选择配置文件 已获得使用此连接应用程序的预授权,然后单击保存。 同样,单击“管理权限集”以选择权限 集。如有必要,创建权限集。

若要指定使用者密钥,请使用命令的标志。例如,如果您的 使用者密钥是 04580y4051234051,你通过登录 Dev Hub 组织来授权它 浏览器,在终端(macOS 和 Linux)或命令提示符下运行此命令 (视窗):

–client-idorg login

sf org login web --client-id 04580y4051234051 --set-default-dev-hub --alias my-hub-org

看 有关更多示例,请参阅组织登录 Web 和组织登录 JWT 的参考。

安全地使用默认连接的应用程序

如果您使用命令授权组织,但未指定标志,则 Salesforce CLI 在组织中创建一个名为 的默认连接应用程序。但是,其刷新令牌设置为永不过期。作为安全最佳 实践中,Salesforce 建议组织中的刷新令牌在 90 天或更短时间后过期。 另一个最佳安全做法是将访问令牌的过期时间设置为 15 分钟。 与刷新令牌类似,默认连接应用中的访问令牌设置为永不过期。 若要继续以安全的方式使用此默认连接的应用程序,请配置其策略。

org login web–client-idSalesforce CLI

  1. 登录到您的组织。
  2. 在“设置”中,在“快速查找”框中输入“OAuth”,然后选择“连接的应用程序 OAuth 使用情况”。
  3. 选择 Salesforce CLI 应用程序,然后单击安装。再次单击“安装”进行确认。
  4. 单击编辑策略
  5. 在“OAuth 策略”部分中,对于“刷新令牌策略”字段,单击“刷新令牌过期时间:”,然后输入 90 天或更短。
  6. 在“会话策略”部分中,将“超时值”设置为 15 分钟
  7. 点击保存

如果对刷新令牌已过期的组织运行 CLI 命令,则会收到 错误。为 例:

ERROR running org open: Error authenticating with the refresh token due to: expired access/refresh token

该命令还显示过期的刷新令牌 “已连接状态”列中的信息。要继续使用组织,请使用 or 命令重新授权它。

org listorg login weborg login jwt

Salesforce CLI 通过以下方式自动处理过期的访问令牌 引用刷新令牌。

使用现有访问令牌

当您使用命令授权组织时,Salesforce CLI 会负责生成和刷新所有令牌,例如访问权限 令 牌。但有时您想对现有组织运行一些 CLI 命令,而无需 贯穿整个授权过程。在本例中,您需要提供 托管要连接到的组织的 Salesforce 实例。

org login几乎所有具有该标志的 CLI 命令都接受访问令牌。唯一的例外是 .

–target-org | -oorg display user

  1. 打开终端(macOS 和 Linux)或命令提示符 (Windows)。
  2. 要获取要连接到的组织的实例 URL 和访问令牌,请运行 org display 命令。查看 Access Token 和 Instance 的值 Url 键。sf org display --target-org myorg === Org Description KEY VALUE ─────────────── ─────────────────────────────────────────────── Access Token 00D8H0000007wpr!AQkAQAlOT5H (truncated for security) ... Instance Url https://creative-impala-20hx3-dev-ed.my.salesforce.com ...
  3. 使用 config set 设置 org-instance-url 配置变量。要在本地设置它, 从 Salesforce DX 项目运行命令;若要全局设置它,请使用 –-global 标志。sf config set org-instance-url=https://creative-impala-20hx3-dev-ed.my.salesforce.com --global
  4. 运行 CLI 命令时,请使用组织的访问令牌作为 —target-org 标志的值,而不是组织的用户名。sf project deploy start --source-dir <source-dir> --target-org 00D8H0000007wpr!AQkAQAlOT5H

Salesforce CLI 不会将访问令牌存储在其内部文件中。它仅用于此目的 CLI 命令运行。

组织的授权信息

您可以查看已授权的所有组织的信息,以及 您已经创建。

要查看有关组织的授权信息,请从终端(macOS 和 Linux) 或命令提示符 (Windows)。

sf org display --target-org <username-or-alias>

如果已设置默认组织,则不必指定标志。要显示 您已授权或创建,请运行 .–target-orgorg list

如果您为组织设置了别名,则可以使用标志指定它。此示例使用别名。–target-orgmy-scratch-org

sf org display --target-org my-scratch-org

Warning: This command will expose sensitive information that allows for subsequent activity using your current authenticated session.
Sharing this information is equivalent to logging someone in under the current credential, resulting in unintended access and escalation of privilege.
For additional information, please review the authorization section of the https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_auth_web_flow.htm

=== Org Description

 KEY             VALUE                                                                                                            
 ─────────────── ──────────────────────────────────────────────────────────────────────────────────────────────────────────────── 
 Access Token    <long-string> 
 Alias           my-scratch-org                                                                                                        
 Api Version     58.0                                                                                                             
 Client Id       PlatformCLI                                                                                                      
 Created By      jdoe@fabdevhub.org                                                                       
 Created Date    2023-06-09T17:59:18.000+0000                                                                                     
 Dev Hub Id      jdoe@fabdevhub.org                                                                       
 Edition         Developer                                                                                                        
 Expiration Date 2023-06-16                                                                                                       
 Id              00D8H0000007wprU                                                                                               
 Instance Url    https://java-connect-41-dev-ed.scratch.my.salesforce.com                                                       
 Org Name        Your Company                                                                                          
 Signup Username test-gm9uud@example.com                                                                                    
 Status          Active                                                                                                           
 Username        test-gm9uud@example.com

要获取更多信息,例如 Salesforce DX 身份验证 URL,请包含该标志。此标志显示 Sfdx 仅当您使用 而不是 授权组织时,身份验证 Url 值才可用。–verboseorg login weborg login jwt

注意

为了帮助防止安全漏洞,输出不包括组织的客户端密码或刷新令牌。org display

注销组织

出于安全考虑,您可以使用 Salesforce CLI 注销您拥有的任何组织 先前已授权。如果您不这样做,这种做法会阻止其他用户访问您的组织 希望他们这样做。

重要

注销组织后访问组织的唯一方法是使用密码。 默认情况下,新的临时组织包含一个没有密码的管理员。因此,要避免 失去对临时组织的访问权限,请为临时组织的至少一个用户设置密码,如果您 想要在注销后再次访问它。如果您不想再次访问临时组织, 删除它,而不是注销 它。org delete scratch

要注销组织,请从终端运行 (macOS 和 Linux)或命令提示符 (Windows)。此示例使用别名注销。org logoutmy-hub-org

sf org logout --target-org my-hub-org

要注销所有组织(包括临时组织),请使用该标志。–all

sf org logout --all

要再次访问临时组织以外的组织,请重新授权它。

当您注销某个组织时,它将不再显示在输出中。如果注销 Dev Hub 组织,则会显示关联的临时组织 仅当指定标志时。org list–all

元数据覆盖率

启动“元数据覆盖率”报告以确定临时组织支持的元数据 源跟踪目的。元数据覆盖率报告是 跨多个渠道的元数据覆盖。这些渠道包括元数据 API、临时组织 源跟踪、解锁包、第二代托管包、经典托管包 包裹等。

查看“元数据覆盖范围”报告。

有关更多信息,请参阅《元数据 API 开发人员指南》中的元数据类型。

我们移动了有关已解锁包中硬删除组件的信息。