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

Salesforce Connected App配置:如何用永久API密钥认证RestResource

解决方案

方案一:自定义API密钥认证(最适配外部服务限制)

这种方式无需依赖OAuth2,直接通过请求头传递永久API密钥,完全匹配外部服务只能硬编码单个键值对的要求,同时可精准控制访问权限。

  • 步骤1:存储API密钥
    创建自定义设置(Custom Setting)或自定义元数据类型(Custom Metadata Type),例如命名为API_Key_Settings,包含字段:API_Key__c(存储密钥值)、Allowed_Endpoint__c(指定允许访问的RestResource路径,比如/services/apexrest/myendpoint)。手动添加一条记录,填入预设密钥和允许的端点路径。

  • 步骤2:修改RestResource类添加认证逻辑
    在RestResource的POST方法开头加入认证检查,示例代码如下:

    @RestResource(urlMapping='/myendpoint/*')
    global class MyRestResource {
        @HttpPost
        global static void handlePost() {
            // 从请求头获取API密钥
            RestRequest req = RestContext.request;
            String apiKey = req.headers.get('X-API-Key');
            
            // 验证密钥有效性
            API_Key_Settings__c setting = API_Key_Settings__c.getInstance('Default');
            if (apiKey == null || !apiKey.equals(setting.API_Key__c)) {
                RestContext.response.statusCode = 401;
                RestContext.response.responseBody = Blob.valueOf('Unauthorized: Invalid API Key');
                return;
            }
            
            // 验证是否允许访问当前端点
            String currentEndpoint = req.requestURI;
            if (!currentEndpoint.contains(setting.Allowed_Endpoint__c)) {
                RestContext.response.statusCode = 403;
                RestContext.response.responseBody = Blob.valueOf('Forbidden: Endpoint not allowed');
                return;
            }
            
            // 原有业务逻辑:生成平台事件等
            // ...
        }
    }
    
  • 步骤3:外部服务配置
    在外部服务的请求头中硬编码:X-API-Key: [你设置的密钥值],直接调用RestResource端点即可。

方案二:Connected App + JWT认证(长期有效令牌)

如果必须使用Connected App,JWT认证可生成有效期最长10年的令牌,但要求外部服务支持生成JWT签名(若外部服务无法生成JWT,此方案不适用)。

  • 步骤1:配置Connected App

    1. 创建Connected App,启用JWT Bearer Flow,上传数字证书公钥。
    2. 在OAuth Settings中设置令牌有效期为最大值(10年),并添加api权限范围。
    3. 限制访问范围:
      • 设置IP限制,仅允许外部服务的IP地址访问。
      • 创建专用Profile,仅授予该Profile访问目标RestResource Apex类的权限,将JWT认证用的用户分配到该Profile。
  • 步骤2:生成长期JWT令牌
    使用私钥生成JWT令牌,将exp(过期时间)设置为10年后的时间戳,外部服务将该令牌硬编码在请求头Authorization: Bearer [JWT令牌]中,令牌到期前永久有效。

方案三:Connected App + 刷新令牌(半自动永久访问)

若外部服务支持存储刷新令牌,可采用OAuth2的Authorization Code Flow,获取刷新令牌后定期自动刷新访问令牌。但此方案需要外部服务处理令牌刷新逻辑,不符合“仅硬编码单个变量”的要求,仅作为补充参考。

关键注意事项
  • 所有方案都要严格限制IP访问,避免密钥/令牌被滥用。
  • 自定义API密钥需定期轮换,即使是永久密钥,也建议每隔一段时间更新并同步外部服务配置。
  • 使用JWT认证时,必须妥善保管私钥,一旦泄露立即更换证书并重新配置Connected App。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:20:10