课程章节介绍
大家好,我是你们的Salesforce老师。今天我们来聊聊一个非常实用的小知识点,就是在Apex代码中,怎么利用,命名凭证,(Named Credential)提供的合并字段,帮我们自动拼出HTTP请求的授权头,从而安全、方便地调用外部接口。
你可能已经知道,命名凭证可以在后台配置好连接外部服务的地址、身份验证方式,让我们在代码里不用硬编码用户名密码或令牌。那具体怎么在Apex里拿到那些验证信息呢?Salesforce给了我们一组,合并字段,,就像占位符一样,写请求体或者请求头的时候,直接引用它们,运行时会自动替换成正确的值。
这些字段中,有几个的可用性和我们选的身份验证方法直接相关:
- 如果你用的是,密码验证,(Password Authentication),那么 ,`{!Credential.Username}`, 和 ,`{!Credential.Password}`, 这两个字段就可以用。注意哈,幻灯片翻译里的“收件箱”其实是错的,是“用户名”才对。这样你可以单独拿到用户名和密码。
- 要是你用的是,OAuth 2.0 验证,,那你会拿到 ,`{!Credential.OAuthToken}`, 这个字段,里面装着OAuth的访问令牌。
除此之外,还有两个非常好用的通用字段,无论什么验证方式都能用,它们会帮你直接把整个`Authorization`头部的值准备好:
一个是 ,`{!Credential.AuthenticationMethod}`,,它会告诉你当前是什么认证方式:密码验证时就返回字符串 ,Basic,,OAuth 2.0 就返回 ,Bearer,,如果根本没配验证,这个值就是空的。
另一个是 ,`{!Credential.AuthenticationHeaderValue}`,,它就更直接了,返回的就是你可以直接放到HTTP头`Authorization`后面的那个值。比如密码验证时,它帮你把用户名密码按“用户名:密码”格式做完Base64编码;OAuth时,它直接给你令牌本身;没验证就是空。
所以你在代码里写HTTP请求的时候,可以这样用:
```apex
HttpRequest req = new HttpRequest();
req.setHeader('Authorization', '{!Credential.AuthenticationMethod} {!Credential.AuthenticationHeaderValue}');
```
或者像有些例子,直接写成 `'Authorization', '{!Credential.AuthorizationHeaderValue}'`,因为那个 `AuthenticationHeaderValue` 有时候已经带了前缀,具体看文档配置。
用这些合并字段,你的代码就完全不用硬编码敏感信息,而且换一个命名凭证,相同的代码换个环境也能直接用,非常灵活。
简单总结一下:
- 密码验证:你能拿到`Username`和`Password`,`AuthenticationMethod`返回`Basic`,值被编码好。
- OAuth 2.0:你能拿到`OAuthToken`,`AuthenticationMethod`返回`Bearer`,值就是令牌。
- 无验证:这些字段基本都空,`AuthenticationMethod`也是空。
好了,这一页的内容就这么多。理解了这几个合并字段,你就能安全高效地在Apex里构建对外请求了。有什么问题随时问我。我们下节课见!
关键词
Apex
Salesforce
Developer Guide