将 Salesforce CRM 与企业中受保护的 Cloud Functions 相集成

本教程介绍一种方法,帮助保护从 Google Cloud 外部托管的服务调用的 Cloud Functions。常见用例包括从客户关系管理 (CRM) 系统、合作伙伴系统或面向消费者的 Web 应用等软件即服务 (SaaS) 应用调用 Cloud Functions。

本教程适用于架构师、产品所有者和 IT 专业人员。其中介绍了如何从外部来源调用 Cloud Functions 函数,并讨论了使用 Cloud Functions 的常见用例。

本教程假定您熟悉 Cloud Functions、Salesforce、Node.js 和 REST API。

目标

  • 部署可由外部服务调用的 Cloud Functions 函数。
  • 使用 Identity and Access Management (IAM) 权限控制对函数的访问权限。
  • 构造一个 JSON Web 令牌 (JWT) 请求,然后使用来自外部服务的 ID 令牌调用 Cloud Functions 函数。
  • 验证只有已获授权的服务可访问受保护的函数。

费用

本教程使用 Google Cloud 的以下收费组件:

  • Cloud Functions

您可使用价格计算器根据您的预计使用量来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 Cloud Functions API。

    启用 API

简介

通过 Cloud Functions,您能够在 Google Cloud 上运行代码,并按需调用函数或调用来响应事件。

企业的技术生态系统中通常具有各种平台和应用。集成这些平台及其存储的业务数据通常是保持业务敏捷性的关键所在。对组织而言,保护企业数据和跨应用的数据移动至关重要。在将企业应用(例如 Salesforce CRM)与 Cloud Functions 集成时,您应采取措施来确保函数调用的安全性,从而控制这些函数是由谁如何调用的。

精心设计的访问权限控制机制具有诸多优势。它可帮助减少攻击面并采用最小权限原则。此外,它建立了安全和控制机制,而且因为您可限制允许的调用者列表,它还有助于提高费用的可预测性。

要了解如何添加对 Cloud Functions 的访问权限控制,在本教程中您将了解如何从 Salesforce CRM 调用受保护的 Cloud Functions 函数。在 Salesforce CRM 平台中创建新的客户记录,并将其发布到 Google Cloud 中的记录系统(客户主实例)进行处理时,系统会调用该函数。虽然本教程重点介绍如何使用 Salesforce CRM,但该解决方案中使用的方法可用于从其他 SaaS 应用调用 Cloud Functions。

为简单起见,GitHub 代码库中提供了您使用的 Cloud Functions 函数。

架构

下图概述了从外部服务调用受保护的 Cloud Functions 函数的架构和关键步骤。您可按专用方式部署 Cloud Functions 函数的实例,以便只有已获授权的用户和服务才能调用这些函数。

此方法的架构,展示了获取身份验证和调用 Cloud Functions 函数所涉及的步骤。

图中的步骤如下所示:

  1. 外部 Salesforce 服务使用已签名的 JWT 请求 ID 令牌。
  2. 如果 JWT 有效,则系统从 Google 授权服务器返回已签名的 ID 令牌。
  3. Salesforce 服务使用 ID 令牌向受保护的 Cloud Functions 函数发出 API 请求。
  4. Cloud Functions 函数容器在内部验证 Salesforce 服务在 Authorization Bearer 标头中发送的 ID 令牌。
  5. 系统根据令牌的有效性执行 Cloud Functions 函数:
    • 如果令牌有效,则执行 Cloud Functions 函数代码,并向调用服务返回成功响应。您可以根据需要从 Cloud Functions 函数调用其他 Google Cloud 服务。
    • 如果令牌无效,则返回 HTTP 401403 状态代码响应,并且不执行 Cloud Functions 函数代码。

在本教程中,调用 Cloud Functions 函数的外部服务托管在 Salesforce 平台上。在 Salesforce CRM 中创建客户记录会触发流水线并调用图中所列的步骤。Salesforce CRM 具有 Google Cloud 服务帐号的私钥,并执行图中所示的步骤来调用受保护的 Cloud Functions 函数。为此,您需要使用 Salesforce Apex 类

在 Salesforce CRM 中创建客户记录时,Apex 触发器会导致 Apex 类 (GCPManageCustomersService) 中的可排队作业异步运行。

调用受保护的 Cloud Functions 的常见用例

您可以将 Cloud Functions 集成到您的生态系统中,它们在这里可用作您的端到端企业业务流程的组成部分。您可在下述任务中使用 Cloud Functions:

  • 将业务数据插入 Google Cloud 进行存储和分析处理,例如来自前端 CRM 系统的客户记录。

  • 创建或更新保存在后备存储(例如 Firestore 和 Cloud SQL)中的客户数据,前提是这些存储用作客户主实例(即用作记录系统)。

  • 从 Google Cloud 上的数据存储中检索事务数据,例如订单、服务请求、服务预约和商品详情。您可执行此操作,在 Salesforce 等 SaaS 平台中创建客户的 360 度视图。

  • 转换从合作伙伴组织接收的数据文件,这些文件需要经过解析、处理,然后加载到 Google Cloud 上的数据湖或数据仓库中。

  • 使用 BigQuery 和 BigQuery 机器学习解析消费者互动数据(例如表单提交、到网站的图片或文档上传)来生成数据洞见。

在本教程中,您将实现第一个用例 - 将企业数据插入 Google Cloud。在 Salesforce CRM 中创建客户数据后,系统会通过调用受保护的 Cloud Functions 函数将该数据发送到 Google Cloud。

您可以根据需要在 Google Cloud 中处理新的客户记录。一些常见模式包括将客户记录插入客户主实例(例如 Cloud SQL、Firestore 或 BigQuery)进行分析处理。本教程不讲解如何处理这些记录。

初始化环境

  1. 在 Cloud Console 中,点击激活 Cloud Shell

    打开 Cloud Shell

    您使用 Cloud Shell 执行本教程中的所有终端命令。

  2. 在 Cloud Shell 中,设置您创建或选择用作默认项目的项目。将 project-id 替换为您的 Cloud 项目 ID。

    gcloud config set project project-id
    
  3. 区域和地区分配默认设置:

    gcloud config set run/region us-central1
    gcloud config set compute/zone us-central1-a
    

    本教程使用 us-central1 作为默认区域,使用 us-central1-a 作为默认地区。

创建受保护的 Cloud Functions 函数

第一步是创建稍后要调用的 Cloud Functions 函数。

克隆源代码库

  1. 在 Cloud Shell 中,克隆包含示例 Cloud Functions 函数和 Salesforce 工件的 GitHub 代码库:

    git clone https://github.com/GoogleCloudPlatform/salesforce-cloud-functions-crm-tutorial
    
  2. 更改为通过克隆代码库创建的目录:

    cd salesforce-cloudfunc-integration
    

查看目录中的代码

该目录包含两个目录,分别名为 salesforcemanage-customer-funcsalesforce 目录包含以下 Salesforce Apex 代码文件:

  • CustomerAccounts.trigger 文件。此文件包含的代码会在创建新客户帐号时触发 GCPManageCustomersService 类中可排队的作业。
  • GCPManageCustomersService 类。此文件包含用于请求 Google ID 令牌来交换生成的 JWT 的代码,并调用 Cloud Functions 函数。
  • Salesforce XML 元数据文件。

manage-customer-func 目录包含名为 secureFunction 的 Cloud Functions 函数的 Node.js 代码文件,还包含概述 Cloud Functions 函数依赖项的打包文件。

为外部 Salesforce 服务创建服务帐号以调用函数

最好按照最小权限原则,严格管理对 Google Cloud 上部署的服务和资源的访问权限。在本部分中,您将为访问 Cloud Functions 函数的外部 SaaS 服务创建服务帐号。

Console

  1. 在 Cloud Console 中,转到服务帐号页面。

    转到“服务帐号”页面

  2. 点击选择项目,然后选择您为本教程创建的项目。

  3. 点击创建服务帐号

  4. 输入服务帐号名称 function-invoker-sa

  5. 点击创建

  6. 为此服务帐号选择 Cloud Functions Invoker 角色,然后点击保存

  7. 点击继续

  8. 点击创建密钥,为密钥类型选择 P12,然后点击创建

    系统会将 P12 密钥文件下载到您的本地磁盘。

    记下 Google Cloud 生成的默认密码(通常为 notasecret)。

  9. 点击完成,完成服务帐号的创建。

  10. 在 Cloud Shell 中,点击更多 并选择上传文件

  11. 要将文件上传到 Cloud Shell,请选择您之前下载的 project-id-NNNNNN.p12 密钥文件,然后点击打开。(字符串 NNNNNN 是一组作为密钥文件名的一部分生成的数字。)

  12. 在 Cloud Shell 中,转到您的主目录:

    cd $HOME
    
  13. 重命名刚刚上传的密钥文件,使用稍后可在本教程中使用的更易记的名称:

    mv ${DEVSHELL_PROJECT_ID}-NNNNNN.p12 external-service-invoker-sa.p12
    

gcloud

  1. 转到您的主目录:

    cd $HOME
    
  2. 创建一个环境变量,用于保存您将创建的服务帐号的名称:

    export SERVICE_ACCOUNT_NAME=function-invoker-sa
    
  3. 创建服务帐号:

    gcloud beta iam service-accounts create ${SERVICE_ACCOUNT_NAME} \
        --display-name ${SERVICE_ACCOUNT_NAME}
    
  4. 为服务帐号生成 P12 密钥并下载该密钥:

    gcloud iam service-accounts keys create ~/external-service-invoker-sa.p12 \
        --key-file-type p12 \
        --iam-account ${SERVICE_ACCOUNT_NAME}@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com
    

    P12 密钥将下载到 Cloud Shell 中的主 ($HOME) 目录。Cloud Shell 中显示的输出也会在下载密钥的位置显示。

部署 Cloud Functions 函数

您需要将 Cloud Functions 函数部署为受保护的函数。只有已获得访问权限的用户和服务帐号才能调用该函数。您将在下一步中设置 IAM 访问权限来建立权限。

  1. 在 Cloud Shell 中,切换到 manage-customer-func 目录:

    cd manage-customer-func
    
  2. 部署函数:

    gcloud functions deploy secureFunction \
        --runtime nodejs8 \
        --trigger-http
    
  3. 验证函数是否已成功部署:

    gcloud functions describe secureFunction
    

    成功部署会显示如下所示的就绪状态:

    status:  ACTIVE
    timeout:  60s
    httpsTrigger:
      url: https://us-central1-[PROJECT_ID].cloudfunctions.net/secureFunction
    

    记下 httpsTrigger 网址;您稍后需要用到它。

授予对已部署函数的访问权限

接下来,您需要为创建的服务帐号分配适当的角色,使其能够访问 secureFunction Cloud Functions 函数。您还需要移除自动添加的 allUsers 帐号。结果就是,只有该服务帐号可以调用 Cloud Functions 函数。

Console

  1. 在 Cloud Console 中,打开 Cloud Functions 页面。

    转到 Cloud Functions 页面

  2. 从函数列表中选择 secureFunction

  3. 如果信息面板未打开,请点击工具栏中的显示信息面板

  4. 权限标签页中,点击添加成员

  5. 新成员框中,输入 function-invoker-sa 搜索需要访问您的函数的服务帐号,然后将其选中。

  6. 选择角色列表中,选择 Cloud Functions,然后选择 Cloud Functions Invoker 角色。

  7. 点击保存

  8. 权限标签页中,展开 Cloud Functions Invoker 角色。

  9. allUsers 成员对应的行中,点击删除 按钮,然后点击移除进行确认。这将从此函数中移除公共访问权限。

gcloud

  1. Cloud Function Invoker 角色分配给您创建的服务帐号,允许它访问已部署的函数:

    gcloud beta functions add-iam-policy-binding secureFunction \
        --member=serviceAccount:${SERVICE_ACCOUNT_NAME}@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --role=roles/cloudfunctions.invoker
    
  2. Cloud Function Invoker 角色中移除 allUsers 成员:

    gcloud beta functions remove-iam-policy-binding secureFunction \
        --member=allUsers \
        --role=roles/cloudfunctions.invoker
    

创建 Salesforce 服务以调用受保护的函数

在 Salesforce 组织中,您需要设置调用业务流程流所需的 Apex 代码。您可以使用 Salesforce CLI (SFDX) 将 Salesforce 代码和所需配置部署到暂存组织中。如果需要,您可稍后将这些已部署的更改升级到生产环境中。

以下列表总结了您需要在 Salesforce 组织中执行的各项任务。本部分中的详细说明将引导您完成每项任务。

  1. 设置 Salesforce CLI
  2. 创建一个暂存组织,并将代码从克隆的代码库推送到该组织。
  3. 从导出的 Google Cloud 服务帐号 P12 密钥创建一个 Java 密钥库 (JKS) 密钥,并将该 JKS 密钥导入 Salesforce 服务。
  4. 使用与您的 Google Cloud 设置相关的数据填充自定义元数据类型对象。这包括要调用的函数的端点、服务帐号电子邮件,以及 Salesforce 服务可用于请求 ID 令牌的令牌端点。
  5. 审核所创建的 Apex 类,并确保 Apex 代码中正确引用了自定义元数据类型字段名称和 JKS 密钥名称。
  6. 在 Salesforce CRM 中创建客户记录。这将调用 CustomerAccounts.trigger 代码,该代码会启动将新的客户记录数据发送到 Google Cloud 的过程。

设置 Salesforce CLI

在本部分中,您将安装 Salesforce CLI 并为其设置授权。

安装 Salesforce CLI

  1. 在 Cloud Shell 中,转到主目录:

    cd $HOME
    
  2. 在 Cloud Shell 会话中安装 Salesforce CLI:

    wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz
    
  3. 解压缩下载的 tar 文件:

    tar -xvf sfdx-linux-amd64.tar.xz
    
  4. 将 Salesforce 二进制文件添加到路径:

    export PATH="$PATH:${HOME}/sfdx-cli-v7.8.1-8f830784cc-linux-x64/bin"
    

    现在,您可以使用 Salesforce CLI 执行命令。

  5. 验证 CLI 是否已正确设置:

    sfdx
    

    输出如下所示:

    显示 sfdx 命令的输出的终端列表,其中有版本、使用情况、命令和主题。

    您将看到版本信息和命令列表。

  6. 在 Salesforce 组织的 Setup(设置)中,在 Quick Find(快速查找)框中输入 Dev Hub,然后选择 Dev Hub(开发中心):

    在 Salesforce 信息中心搜索“开发”。

  7. 启用开发中心:

    使用“开发中心”切换开关启用开发中心。

    在此步骤中,您可以设置一个暂存组织来部署本教程中的代码。

  8. 在 Cloud Shell 中生成一个证书和密钥对,用于从 SFDX CLI 向您的 Salesforce 组织进行身份验证:

    openssl req -x509 -sha256 -nodes -days 36500 -newkey \
       rsa:2048 -keyout salesforce.key -out \
       salesforce.crt
    

    系统将提示您输入详细信息来确认证书。在本教程中,这些值不重要,因此请按 Enter 接受默认值。

  9. 在 Cloud Shell 中,点击更多 并选择下载文件

  10. 完全限定文件路径框中,输入以下文件名,然后点击下载

    salesforce.crt
    

    这会将您生成的证书下载到您的本地机器中。在下一过程中,您需要将证书上传到 Salesforce 组织。

在 Salesforce(开发中心)组织中创建连接应用,向 Salesforce CLI 授权

  1. 根据您的 Salesforce 组织版本,使用下列步骤之一创建关联的应用:

    • 在 Lightning Experience 中,使用应用管理器创建关联的应用。在 Salesforce 组织的 Setup(设置)中,在 Quick Find(快速查找)框中输入 App,然后选择 App Manager(应用管理器)。点击 New Connected App(新建关联的应用)。
    • 在 Salesforce Classic 中,在 Salesforce 组织的 Setup(设置)的 Quick Find(快速查找)框中输入 Apps,然后依次点击 Build(构建)和 Create(创建),选择 Apps(应用)。在 Connected Apps(关联的应用)窗格中,点击 New(新建)。
  2. 输入联系人电子邮件信息以及适合您的应用的其他任何信息。

  3. 选择 Enable OAuth Settings(启用 OAuth 设置)。

  4. 对于 Callback URL(回调网址)值,请输入 http://localhost:1717/OauthRedirect

  5. 要启用使用数字签名的选项,请点击 Choose File(选择文件),然后选择您之前下载的 salesforce.crt 证书文件。

    此证书用作公钥,用于对在 Cloud Shell 会话中运行的 SFDX 客户端进行身份验证并将其连接到 Salesforce 开发中心组织。

  6. 将以下 OAuth 范围添加到 Selected OAuth Scopes(选定的 OAuth 范围),方法是点击相应范围,然后点击 Add(添加)箭头选中它们:

    • Access and manage your data (api)(访问和管理您的数据(api))
    • Perform requests on your behalf at any time (refresh_token, offline_access)(随时代表您执行请求(refresh_token, offline_access))
    • Provide access to your data via the web (web)(允许通过网络访问您的数据(网络))

      在 Salesforce 数据中心内选择的 OAuth 范围。

  7. 点击 Save(保存)。

  8. 记下显示的使用方密钥。

  9. 点击 Manage(管理),然后点击 Edit Policies(修改政策)以更改 OAuth 政策。

  10. Permitted users(允许的用户)设置为 Admin Approved Users are Pre-Authorized(管理员批准的用户已获得预先授权),并确认选择。

  11. 将 IP 放宽设置设为 Relax IP Restrictions(放宽 IP 限制)。

  12. 点击 Save(保存)。

  13. 点击 Manage Profiles(管理个人资料),然后添加 System Administrator 个人资料。

    这样,使用此个人资料的用户便可登录 SFDX CLI。

  14. 点击 Save(保存)。

完成 Salesforce CLI 的授权步骤

  1. 在 Cloud Shell 中创建一个环境变量,用于保存上一步中由关联的应用创建的使用方密钥:

    export CONSUMER_KEY=your-consumer-key
    

    your-consumer-key 替换为您的使用方密钥。

  2. 创建一个环境变量,用于保存您之前在本教程中创建的 Salesforce 组织的用户名:

    export SALESFORCE_USERNAME=your-salesforce-username
    

    your-salesforce-username 替换为您的 Salesforce 用户名。

  3. 在 Cloud Shell 中,使用 JWT 授权向 Salesforce 组织进行身份验证:

    sfdx force:auth:jwt:grant \
        -u ${SALESFORCE_USERNAME} \
        -f $(pwd)/salesforce.key -i ${CONSUMER_KEY}
    

    您将看到一条消息显示您已获得授权。

    如需详细了解如何使用基于 JWT 的流向组织授权,请参阅 Salesforce 文档中的使用基于 JWT 的流向组织授权

将 Salesforce 元数据推送到暂存组织

  1. 在 Cloud Shell 中,转到克隆的代码库的目录:

    cd salesforce-cloudfunc-integration
    
  2. 创建一个暂存组织来测试您为本教程克隆的代码库。

    sfdx force:org:create \
        --setdefaultusername \
        --definitionfile salesforce/config/project-scratch-def.json \
        --targetdevhubusername ${SALESFORCE_USERNAME} \
        --setalias gcp-func-test-scratch-org
    

    建议使用暂存组织来实现此目的,您可在该组织中安全地测试新的软件包和克隆的代码库。

  3. 转到 salesforce 子目录:

    cd salesforce
    
  4. 将元数据和代码推送到暂存组织:

    sfdx force:source:push
    
  5. 为暂存组织生成一个网址:

    sfdx force:org:open
    
  6. 点击生成的网址,转到浏览器中的暂存组织。

创建包含导出的 P12 密钥的 JKS 密钥库文件

Salesforce 证书和密钥对用于在 Salesforce 服务与外部网站和服务器之间进行经过身份验证的 SSL 通信。Salesforce 服务必须安全地存储您之前在本教程中生成的 Google Cloud 服务帐号 P12 密钥中。Salesforce 服务中的密钥必须采用 JKS(Java 密钥库)格式进行存储。

  1. 在 Cloud Shell 中,将 P12 密钥添加到主目录中名为 salesforce.jks 的 JKS 密钥库文件中:

    keytool \
        -importkeystore \
        -srckeystore $HOME/external-service-invoker-sa.p12 \
        -destkeystore $HOME/salesforce.jks \
        -srcstoretype pkcs12 \
        -srcstorepass notasecret \
        -deststorepass notasecret \
        -deststoretype jks \
        -destalias google_cloud \
        -srcalias privatekey
    
  2. 在 Cloud Shell 中,点击更多 ,然后点击下载文件

  3. 完全限定文件路径框中,输入以下文件名,然后点击下载

    salesforce.jks
    

    这会将您生成的密钥库下载到您的本地计算机中。

将 JKS 文件导入 Salesforce 暂存组织

现在,您可以完成启用 Salesforce.com 身份提供商并上传 JKS 密钥的步骤。

  1. 在 Salesforce 组织的 Setup(设置)中,在 Quick Find(快速查找)框中输入 Identity,然后点击 Identity Provider(身份提供商),导航到身份提供商设置页面。

    导航到 Salesforce 信息中心内的身份提供商设置页面。

  2. 点击 Enable Identity Provider(启用身份提供商),然后点击 Save(保存)以接受证书。

  3. Setup(设置)中的 Quick Find(快速查找)框中输入 Certificate,然后选择 Certificate and Key Management(证书和密钥管理)。

    导航到 Salesforce 信息中心内的证书和密钥管理页面。

  4. 点击 Import from Keystore(从密钥库导入)。

  5. 点击 Choose File(选择文件),然后选择您之前下载的 JKS 文件。

  6. Keystore Password(密钥库密码)框中,输入 notasecret

  7. 点击 Save(保存)。

  8. 确保证书标签名为 google_cloud。此标签非常重要,因为 Apex 类使用此名称引用证书。

创建自定义元数据类型对象记录

使用 Salesforce CLI 推送代码库会为您创建自定义元数据类型对象。您需要创建记录来填充该对象中的详细信息,如本部分所示。该记录在 Apex 类中引用,用于将相关元数据映射到您从 Salesforce 服务调用的 Cloud Functions 函数。

  1. 在 Salesforce 暂存组织的 Setup(设置)中,在 Quick Find(快速查找)框中输入 Custom metadata,然后选择 Custom Metadata Types(自定义元数据类型)。

    您将看到名为 GCP Key(GCP 密钥)的自定义元数据类型。

  2. GCP Key(GCP 密钥)旁边,点击 Manage Records(管理记录)。

  3. 点击 New(新建)以创建新记录,然后输入以下内容:

    1. Label(标签)。输入 GCP Function Invoker
    2. Client Email(客户端电子邮件)。按照以下格式输入您创建的服务帐号的地址:

      function-invoker-sa@project-id.iam.gserviceaccount.com

      project-id 替换为本教程的 Cloud 项目的 ID。

    3. Function Audience Endpoint(函数受众端点)。输入 Cloud Functions 函数的 httpsTrigger 端点的网址:

      https://us-central1-project-id.cloudfunctions.net/secureFunction
      
    4. Token Endpoint(令牌端点)。输入 https://www.googleapis.com/oauth2/v4/token

      在 Salesforce 信息中心内设置令牌端点。

  4. 点击 Save(保存)。

在 Salesforce 暂存组织中创建远程网站设置

您可以添加远程网站设置,为 Google Cloud 的 Cloud Functions 函数和 Salesforce 暂存组织中的令牌端点添加 Apex 标注。

  1. 在 Salesforce 组织的 Setup(设置)中,在 Quick Find(快速查找)框中输入 Remote,然后选择 Remote Site Settings(远程网站设置)。
  2. 点击 New Remote Site(新建远程网站)。
  3. 对于 Remote Site Name(远程网站名称),请输入 GCPCloudFunction
  4. 对于 Remote Site URL(远程网站网址),请输入 Cloud Functions 函数的 httpsTrigger 端点:

    https://us-central1-project-id.cloudfunctions.net/secureFunction
    
  5. 点击 Save(保存)。

  6. 点击 New Remote Site(新建远程网站),再创建一个远程网站设置。

  7. 对于 Remote Site Name(远程网站名称),请输入 GCPToken

  8. 对于 Remote Site URL(远程网站网址),请输入 https://www.googleapis.com

    在 Salesforce 信息中心内设置远程网站名称和网址。

  9. 点击 Save(保存)。

测试 Cloud Functions 函数

要测试 Cloud Functions 函数,您需要运行两个测试:

  • 触发 Salesforce 服务,以使用有效令牌调用 Cloud Functions 函数。
  • 在不使用令牌的情况下调用 Google Cloud 的 Cloud Functions 函数。这将验证除非您已经过身份验证,否则无法调用 Cloud Functions 函数。

使用有效的 ID 令牌从 Salesforce 服务调用 Cloud Functions 函数

  1. 在您的 Salesforce 组织中,点击应用启动器图标。

    在 Salesforce 信息中心内启动应用启动器。

  2. 在搜索栏中,搜索 Accounts

  3. 在结果中点击 Accounts(帐号)。

  4. 点击 New(新建)以新建帐号。

  5. 对于 Name(名称),请输入 Test Account(测试帐号)。

  6. 点击 Save(保存)。

    创建帐号会触发 Apex 类,该类调用 secureFunction Cloud Functions 函数。

验证是否已调用 Cloud Functions 函数

您可以查看 Cloud Logging 日志,验证 Cloud Functions 函数是否已成功接收记录。

  • 在 Cloud Shell 中,查看 secureFunction Cloud Functions 函数生成的日志:

    gcloud functions logs read secureFunction
    

    如果调用了 Cloud Functions 函数,您将在日志中看到您在 Salesforce 服务中创建的客户名称 Test Account

在不使用令牌的情况下调用 Cloud Functions 函数

现在,您可以验证确认只有经过身份验证且获得授权的用户才能访问 Cloud Functions 函数。

  1. 向 Cloud Functions 函数发出未经身份验证的请求:

    curl https://us-central1-${DEVSHELL_PROJECT_ID}.cloudfunctions.net/secureFunction
    

    响应是一个 HTTP 403 Forbidden 状态代码,它用于确认访问已遭到拒绝:

    <html><head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>403 Forbidden</title>
    </head>
    <body text=#000000 bgcolor=#ffffff>
    <h1>Error: Forbidden</h1>
    <h2>Your client does not have permission to get URL <code>/secureFunction</code> from this server.</h2>
    <h2></h2>
    </body></html>
    

清除数据

为避免支付费用,最简单的方法是删除您为本教程创建的项目。

删除项目

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除 Salesforce 资源

您还应删除为本教程创建的 Salesforce Developer Edition 组织及相关的暂存组织。

停用您的 Developer Edition 组织

  1. 在 Salesforce(开发中心)组织的“设置”中,在 Quick Find(快速查找)框中输入 Company,然后选择 Company Information(公司信息)。
  2. 点击 Company Information(公司信息)。
  3. 点击 Deactivate Org(停用组织)按钮。

    Salesforce 设置页面中的“停用组织”按钮。

删除暂存组织

  • 在 Cloud Shell 中,运行以下命令来删除 Salesforce 暂存组织:

    sfdx force:org:delete -u gcp-func-test-scratch-org
    

后续步骤