使用OAuth服务器到服务器身份验证调用AEM Forms通信API
本指南提供有关配置和调用AEM Forms Communications Synchronous API的说明,可通过Adobe Developer Console使用OAuth服务器到服务器身份验证访问这些API。
先决条件
要设置用于运行和测试AEM Forms Communications API的环境,请确保您具备以下条件:
更新AEM as a Cloud Service环境
- AEM 2024.10.18459.20241031T210302Z版或更高版本
- 如果2024年11月之前创建的环境,请更新产品配置文件
访问和权限
在开始配置Communications API之前,请确保您具有所需的访问权利和权限。
用户和角色权限
- 在Adobe Admin Console中分配的开发人员角色
- 在Adobe Developer Console中创建项目的权限
Git存储库访问权限
- 访问Cloud Manager Git存储库
- 用于克隆和推送更改的Git凭据
使用Adobe Developer Console (ADC)生成访问令牌
- 使用OAuth服务器到服务器身份验证通过Adobe Developer Console生成访问令牌。
- 从Adobe Developer Console检索客户端ID
开发工具
- 用于运行示例应用程序的Node.js
- Git的最新版本
- 访问终端/命令行
- 用于编辑配置文件(VS代码、IntelliJ等)的文本编辑器或IDE
- 用于API测试的 Postman 或类似工具
配置AEM Forms通信同步API
可使用OAuth服务器到服务器身份验证,通过Adobe Developer Console访问AEM Forms通信API。
请按照以下步骤操作,了解如何配置Forms通信同步API,以使用模板和XDP文件生成PDF:
步骤1:访问AEM云服务环境和AEM Forms端点
访问您的AEM Cloud Service环境详细信息,以获取API配置所需的URL和标识符。
1.1登录Adobe Cloud Manager
- 导航到my.cloudmanager.adobe.com
- 使用您的Adobe ID登录
1.2导航到项目概述
从列表中选择您的项目。 您被重定向到 项目概述 页面
1.3访问和查看AEM Cloud Service环境
您可以使用以下两个选项之一查看或访问AEM Cloud Service环境详细信息:
-
在 项目概述 页面上
-
单击左侧菜单中的“环境”。 您可以看到所有环境的列表
-
单击特定环境名称以查看详细信息
-
在 项目概述 页面上
-
找到 环境 部分
-
单击 “全部显示” 查看所有环境
-
单击环境旁边的省略号菜单(…)
-
选择“查看详细信息”
1.4.查找您的AEM Forms端点
从 环境 详细信息页面,记下您的AEM URL实例。
步骤2:克隆Git存储库
克隆Cloud Manager Git存储库以管理API配置文件。
2.1找到“存储库”部分
-
在 项目概述 页面上,单击 存储库 选项卡
-
找到存储库名称,然后单击省略号菜单(…)
-
复制存储库URL
https://git.cloudmanager.adobe.com/<org>/<program>/2.2使用Git命令进行克隆
-
打开命令提示符或终端
-
运行
git clone命令以克隆Git存储库。code language-bash git clone [repository-url]
例如,要克隆Git存储库,请执行以下命令:
https://git.cloudmanager.adobe.com/formsinternal01/AEMFormsInternal-ReleaseSanity-pXXX-ukYYYY/
要了解有关如何集成Adobe Cloud Manager和Adobe Cloud Manager的更多信息,请参阅Git集成文档。
步骤3:Adobe Developer Console项目设置
3.1访问Adobe Developer Console
- 导航到Adobe Developer Console
- 使用您的Adobe ID登录
- 创建新项目或导航到现有项目
-
在 快速入门 部分中,单击新建项目
-
使用默认名称创建新项目
-
单击右上角的编辑项目
-
提供有意义的名称(例如“formsproject”)
-
单击保存
-
从Adobe Developer Console单击所有项目
-
找到您的项目并单击以将其打开。
3.2添加Forms通信API
-
单击添加API
-
在 添加API 对话框中,按 Experience Cloud 筛选
-
选择“Forms通信API”
-
点击下一个
-
选择 OAuth服务器到服务器 身份验证方法
-
点击下一个
3.3添加产品配置文件
-
选择与您的AEM实例URL ()匹配的产品配置文件
https://Service Type -Environment Type-Program XXX-Environment XXX.adobeaemcloud.com。 -
单击保存配置的 API。API和产品配置文件已添加到您的项目中
-
查看 凭据详细信息 部分
记录API凭据
API Credentials:
================
Client ID: <your_client_id>
Client Secret: <your_client_secret>
Technical Account ID: <tech_account_id>
Organization ID: <org_id>
Scopes: AdobeID,openid,read_organizations
3.4生成访问权限
在Adobe Developer Console中手动生成访问令牌:
-
单击项目API部分中的 “生成访问令牌” 按钮
-
复制生成的访问令牌
| note note |
|---|
| NOTE |
| 访问令牌仅在 24小时 内有效 |
使用Adobe IMS API以编程方式生成令牌:
必需的凭据:
- 客户端 ID
- 客户端密码
- 范围(通常:
openid, AdobeID, read_organizations, additional_info.projectedProductContext, read_pc.dma_aem_cloud, aem.document)
令牌终结点:
| code language-none |
|---|
|
示例请求(curl):
| code language-bash |
|---|
|
响应:
| code language-json |
|---|
|
您现在可以使用生成的访问令牌为开发、暂存或生产环境进行API调用。
步骤4:在AEM环境中注册客户端ID
要使ADC项目的客户端ID能够与AEM实例进行通信,您必须使用YAML配置文件注册它,并通过配置管道进行部署。
4.1查找或创建配置目录
-
导航到克隆的AEM项目存储库并找到
config文件夹 -
如果该文件不存在,请在项目根级别创建它:
code language-bash mkdir config -
在
api.yaml目录中创建一个名为config的新文件:code language-bash touch config/api.yaml -
在
api.yaml文件中添加以下代码:code language-yaml kind: "API" version: "1" metadata: envTypes: ["dev"] # or ["prod", "stage"] for production environments data: allowedClientIDs: author: - "<your_client_id>" publish: - "<your_client_id>" preview: - "<your_client_id>"
以下内容说明了配置参数:
-
kind:始终设置为
"API"(标识为API配置) -
版本: API版本,通常为
"1"或"1.0" -
envTypes:此配置适用的环境类型数组
["dev"]— 仅开发环境["stage"]— 仅暂存环境["prod"]— 仅生产环境
-
allowedClientIDs:允许客户端ID访问您的AEM实例
- 作者:作者层的客户端ID
- 发布:发布层的客户端ID
- 预览:预览层的客户端ID
4.2提交和推送更改
-
导航到克隆的存储库的根文件夹,然后执行以下命令:
code language-bash git add config/api.yaml git commit -m "Whitelist client id for api invocation" git push origin <your-branch>
步骤5:设置配置管道
5.1登录Adobe Cloud Manager
- 导航到my.cloudmanager.adobe.com
- 使用您的Adobe ID登录
5.1找到管道信息卡
-
在项目概述页面上找到 管道 信息卡
-
单击 添加 按钮
5.2选择管道类型
-
对于开发环境:选择“添加非生产管道”。 非生产管道适用于开发和暂存环境
-
生产环境:选择“添加生产管道”。 生产管道需要额外的批准
1. 配置管道 — 配置选项卡
在 配置 选项卡中:
a. 管道类型
- 选择“部署管道”
b. 管道名称
- 提供描述性名称,例如,将管道命名为
api-config-pipieline
c. 部署触发器
- 手动:仅在手动触发时部署(建议用于初始设置)
- 在Git发生更改时:将更改推送到分支时自动部署
d. 重要量度失败行为
- 每次询问:失败时提示操作(默认)
- 立即失败:在度量失败时自动使管道失败
- 立即继续:失败后继续
e.单击 “继续” 以继续访问 Source代码 选项卡
2. 配置管道 — Source代码选项卡
在 Source代码 选项卡中:
a. 部署类型
- 选择“目标部署”
b. 部署选项
- 选择“配置”(仅部署配置文件)。 它告知Cloud Manager这是一个配置部署。
c. 选择符合条件的部署环境
- 选择要部署配置的环境。 在这种情况下,它是一个
dev环境。
d. 定义Source代码详细信息
- 存储库:选择包含
api.yaml文件的存储库。 例如,选择AEMFormsInternal-ReleaseSanity-pXXXXX-ukYYYYY存储库。 - Git分支:选择您的分支。 例如,在本例中,我们的代码部署在
main分支中。 - 代码位置:输入
config目录的路径。 由于api.yaml位于根目录的config文件夹中,因此请输入/config
e.单击 “保存” 以创建管道
步骤6:部署配置
现已创建管道,请部署您的api.yaml配置
6.1来自管道概述
- 在项目概述页面上,找到 管道 信息卡
- 在列表中导航到新创建的配置管道。 例如,查找您创建的管道名称(例如,“api-config-pipeline”)。 您可以查看管道详细信息,包括状态和上次运行。
6.2开始部署**
- 单击管道旁边的 “生成” 按钮(或播放图标▶)
- 如果出现提示并且管道执行开始,请确认部署
6.3验证部署是否成功
-
等待管道完成。
-
如果成功,状态将更改为“成功”(绿色复选标记✓)。
-
如果失败,则状态将更改为“失败”(红叉✗)。 单击 下载日志 以查看错误详细信息。
-
现在,您可以开始测试Forms Communications API。 出于测试目的,您可以使用Postman、curl或任何其他REST客户端调用API。
步骤7: API规范和测试
现在您的环境已配置,您可以使用Swagger UI或以编程方式通过开发NodeJS应用程序开始测试AEM Forms Communication API。
Swagger UI提供了一个用于测试API而不编写代码的交互式界面。使用 尝试它 功能调用和测试生成PDF Forms通信API。
-
导航到Forms Communication API引用,并在浏览器中打开Forms Communication API文档。
-
展开 Document Generation 部分并选择从XDP或PDF模板生成可填写的PDF表单,可以选择合并数据。
-
在右窗格中,单击尝试。
-
输入以下值:
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3 节 参数 值 分段 AEM实例 AEM实例名称不带Adobe域名( .adobeaemcloud.com)。例如,使用pXXXXX-eYYYYY作为存储桶。安全性 持有者令牌 使用Adobe Developer Console项目的OAuth服务器到服务器凭据中的访问令牌 主体 模板 上传XDP以生成PDF表单。 例如,您可以使用此XDP生成PDF。 主体 数据 包含要与模板合并以生成预填充PDF表单的数据的可选XML文件。 例如,您可以使用此XML来生成PDF。 参数 X-Adobe-Accept-Experimental 1 -
单击 发送 以调用API
-
检查 响应 选项卡中的响应:
- 如果响应代码为
200,则表示已成功创建PDF。 - 如果响应代码为
400,则表示请求参数无效或格式不正确。 - 如果响应代码为
500,则表示存在内部服务器错误。 - 如果响应代码为
403,则表示存在授权错误。
在这种情况下,响应代码为
200,这表示已成功生成PDF:
现在,您可以使用下载按钮下载 创建的PDF 并在PDF查看器中查看它:
note note NOTE 出于测试目的,您还可以使用Postman、curl或任何其他REST客户端调用AEM API。 - 如果响应代码为
开发Node.js应用程序以使用 Document Services API 从 XDP 模板和 XML 数据文件生成可填写的PDF表单
先决条件
- 系统上安装的Node.js
- 活动AEM as a Cloud Service实例
- 来自Adobe Developer Console的API身份验证的持有者令牌
- 示例XDP文件: ClosingForm.xdp
- 示例XML文件: ClosingForm.xml
要开发Node.js应用程序,请按照分步开发操作:
步骤1:创建新的Node.js项目
打开cmd/terminal并执行以下命令:
| code language-bash |
|---|
|
步骤2:安装所需的依赖项
安装node-fetch、dotenv和 form-data 库以分别发出HTTP请求、读取环境变量和处理表单数据。
| code language-bash |
|---|
|
步骤3:更新包.json
-
打开cmd/terminal并运行命令:
code language-bash code .
它将在代码编辑器中打开项目。
-
更新
package.json文件以将type添加到module。code language-bash { "name": "demo-nodejs-generate-pdf", "version": "1.0.0", "type": "module", "main": "index.js", }
步骤4:创建.env文件
-
在项目的根级别创建.env文件
-
添加以下配置,并使用ADC项目的OAuth服务器到服务器凭据中的实际值替换占位符。
code language-bash CLIENT_ID=<ADC Project OAuth Server-to-Server credential ClientID> CLIENT_SECRET=<ADC Project OAuth Server-to-Server credential Client Secret> SCOPES=<ADC Project OAuth Server-to-Server credential Scopes>
note note NOTE 您可以从Adobe Developer Console项目中复制 CLIENT_ID、CLIENT_SECRET和SCOPES。
步骤5:创建src/index.js
- 在项目的根级别创建
index.js文件 - 添加以下代码,并将占位符替换为实际值:
| code language-javascript |
|---|
|
步骤6:运行应用程序
| code language-bash |
|---|
|
在demo-nodejs-generate-pdf文件夹中创建PDF。 导航到文件夹以查找名为generatedForm.pdf的生成文件。
您可以打开生成的PDF进行查看。
疑难解答
常见问题和可能的原因
问题1: 403禁止的错误
症状:
- API请求返回
403 Forbidden - 错误消息: 未经授权的访问
可能的原因:
- 未在AEM实例的
api.yaml配置中注册客户端ID
问题2: 401未授权错误
症状:
- API请求返回
401 Unauthorized - 错误消息: 令牌无效或过期
可能的原因:
- 访问令牌已过期(仅在24小时内有效)
- 客户端ID和客户端密钥不正确或不匹配
问题3:404 “未找到”错误
症状:
- API请求返回
404 Not Found - 错误消息:未找到资源或找不到API终结点
可能的原因:
- 存储段参数不正确(不符合AEM实例标识符)
问题4:管道部署失败
症状:
- 配置管道执行失败
- 部署日志显示与
api.yaml相关的错误
可能的原因:
- YAML语法无效(缩进、引号或数组格式问题)
api.yaml放置在不正确的目录中- 配置中的客户端ID格式不正确或不正确
- 客户端密码无效
问题5:Forms Communication API无法执行
症状:
- API请求返回错误,指示不支持的功能或不可用的功能。
- 使用XDP和XML生成PDF不起作用。
- 管道部署成功完成,但运行时API调用失败。
可能的原因:
AEM环境运行的版本是在引入或支持Forms通信API之前发布的。
要更新AEM环境,请参阅更新AEM实例部分。
更新AEM实例
要更新AEM实例以查找环境详细信息,请执行以下操作:
-
选择环境名称旁边的
ellipsis(…)图标,然后单击更新 -
单击 提交 按钮并运行建议的全栈管道。