为服务器端API生成访问令牌 generating-access-tokens-for-server-side-apis

NOTE
AEM Developer Console中的OAuth服务器到服务器凭据自2026年11月4日起可用。
IMPORTANT
使用OAuth服务器到服务器凭据进行服务器端集成。 服务帐户(JWT)凭据已弃用,推荐使用OAuth服务器到服务器。 有关基于JWT的现有集成,请参阅为服务器端API生成访问令牌 — JWT(旧版)。

某些架构依赖于从AEM基础架构之外的服务器上托管的应用程序来调用Adobe Experience Manager (AEM) as a Cloud Service。 例如,移动应用程序调用服务器,然后服务器向AEM as a Cloud Service发出API请求。

使用AEM as a Cloud Service Developer Console创建OAuth服务器到服务器技术帐户。 您的应用程序使用Adobe Identity Management Services (IMS) client_credentials授权交换其客户端ID和客户端密钥以获取访问令牌。 无需签名的JWT、私钥或证书。

NOTE
AEM Developer Console管理对您的AEM环境的访问。 它与developer.adobe.com/console处的​Adobe Developer Console不同。 创建和管理AEM Developer Console中此处描述的技术帐户。

服务器到服务器流 the-server-to-server-flow

如果用户具有IMS组织管理员角色,并且也是AEM Author上的​ AEM用户 ​或​ AEM管理员 ​产品配置文件的成员,则可以创建技术帐户。 客户端密钥仅在创建时向创建它的用户显示。 具有AEM as a Cloud Service环境管理员角色的用户可以查看帐户的详细信息(不包括客户端密钥)。

服务器到服务器流涉及以下步骤:

  1. 创建OAuth服务器到服务器技术帐户并保存其凭据,包括在创建过程中显示的客户端密钥。
  2. 将凭据安全地存储在向AEM发出请求的服务器上。
  3. 使用客户端ID、客户端密钥和范围从IMS请求访问令牌。
  4. 配置技术帐户的产品配置文件和AEM权限。
  5. 使用访问令牌作为持有者令牌调用AEM API。

创建技术帐户并检索其凭据 fetch-the-aem-as-a-cloud-service-credentials

IMPORTANT
AEM Developer Console在创建一个OAuth服务器到服务器客户端密钥时只显示一次。 AEM Developer Console不存储机密值。 它只保留密钥ID及其状态。 IMS将密钥存储为单向哈希。 在显示机密时安全地保存它。 如果丢失密码,请使用其他活动密码创建新密码,或创建新的技术帐户。
  1. 打开集成。 为应用程序访问的环境打开AEM Developer Console,然后选择​集成。 选择​创建新的技术帐户。

    与“创建新的技术帐户”的集成页面突出显示

  2. 创建技术帐户。 在该对话框中,选择​ OAuth服务器到服务器(S2S) ​作为​凭据类型,然后选择​创建。

    选中OAuth服务器到服务器后,创建新的技术帐户对话框

  3. 保存客户端密钥。 保存客户端密钥​对话框显示凭据,包括technicalAccount.clientSecret。 选择​ 下载凭据 ​以将凭据另存为aem-s2s-credentials.json,或选择​复制到剪贴板。 将凭据存储在机密管理器或应用程序的其他受访问控制的位置。

    保存客户端密码对话框并隐藏客户端密码值,突出显示“下载凭据并复制到剪贴板”

    选择​关闭。 在​ Close中,如果无法进一步访问您的密码 ​确认对话框,请选择​Close,但只有在安全保存密码之后。 关闭对话框后,密码无法再次显示。

    关闭以高亮显示“关闭”的密码确认对话框

  4. 审阅技术帐户。 列出新的OAuth服务器到服务器帐户及其​ 活动 ​客户端密钥。 列表中显示的密码ID用于标识密码。 它不是机密值,无法在令牌请求中用作client_secret。

    新OAuth服务器到服务器帐户,有一个活动客户端密钥,其操作菜单打开

若要稍后查看密码的详细信息,请打开客户端密码的行菜单,然后选择​查看。 “凭据”对话框显示IMS端点、范围、客户端ID、技术帐户电子邮件、密码ID和吊销状态。 它不显示客户端密钥值。

凭据对话框,没有客户端密钥值

NOTE
客户最多可创建20个技术帐户。 已删除的帐户将计入此限制。
IMPORTANT
如果某个IMS组织管理员也是AEM Author上的​ AEM用户 ​或​ AEM管理员 ​产品配置文件的成员,则必须创建技术帐户。 由于客户端密钥仅显示一次,因此创建帐户的用户负责通过安全渠道将凭据传递给应用程序所有者。

在非AEM服务器上安装AEM服务凭据 install-the-aem-service-credentials-on-a-non-aem-server

使凭据仅对调用AEM的服务器端应用程序可用。 使用密钥管理器或其他访问控制存储机制。

请勿在浏览器端代码、移动应用程序、源代码控制或日志中放入客户端密钥。 还将访问令牌视为密钥。

请求OAuth访问令牌 request-an-oauth-access-token

向https://<imsEndpoint>/ims/token/v3发送HTTPS POST请求。 您的凭据JSON中的imsEndpoint是IMS主机名。 例如,ims-na1.adobelogin.com使用https://ims-na1.adobelogin.com/ims/token/v3。 使用凭据中提供的主机名,包括使用阶段凭据时的阶段主机名。

使用Content-Type: application/x-www-form-urlencoded并在请求正文中包含这些表单字段:

参数
值
grant_type
client_credentials
client_id
您的凭据中的technicalAccount.clientId。
client_secret
创建密钥时保存的technicalAccount.clientSecret。
scope
scopes中的值,用逗号连接。

对每个表单值进行URL编码。 在请求正文中发送密钥,而不是在URL或查询字符串中发送密钥。

响应包括access_token、token_type和expires_in。 使用access_token调用AEM。 expires_in值是令牌生命周期,以秒为单位。 使用该值,而不是假定固定的过期时间。

缓存并重用访问令牌,直到其接近过期时间,然后使用相同的客户端凭据请求新令牌。 此授权不需要JWT交换或刷新令牌。

NOTE
使用要调用的AEM环境的凭据。 有效的IMS访问令牌未授予其他AEM权限。 按如下所述配置技术帐户的权限。

Node.js身份验证示例 nodejs-authentication-example

有关最小的OAuth服务器到服务器实现,请参阅AEM-CS API客户端库示例。 它使用内置的Node.js API并需要Node.js 18或更高版本,没有其他依赖项。

该示例需要integration对象内的凭据。 从AEM Developer Console下载的aem-s2s-credentials.json文件包含没有此包装器的凭据。 在将其用于示例(例如jq)之前,请将其内容换行:

jq '{integration: .}' aem-s2s-credentials.json > downloaded_integration.json

或者,编辑文件,使其完整内容成为顶级integration字段的值。 从示例存储库的签出中,运行:

node oauth-s2s-cli.js downloaded_integration.json

对于编程使用,OAuth帮助程序接受包装的对象为requestAccessToken(credentials)。 它使用integration内的IMS主机名、客户端ID、客户端密钥和作用域。

保持凭据文件的私密性。 CLI打印访问令牌。 请勿将其输出发送到共享日志或发布它。 该示例的自述文件还显示了如何在AEM API请求中使用令牌。

调用AEM API calling-the-aem-api

使用值Bearer <access_token>在对AEM as a Cloud Service环境的请求的Authorization标头中包含访问令牌。

curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
  "https://author-p<program-id>-e<environment-id>.adobeaemcloud.com/content/dam.json"

使用应用程序访问的环境和层的主机名。 仅调用技术帐户有权访问的资源。

在AEM中为技术帐户用户设置适当的权限 set-the-appropriate-permissions-for-the-technical-account-user-in-aem

  1. 打开Adobe Admin Console。
  2. 选择​ 产品和服务 ​下的​AEM as a Cloud Service。
  3. 为集成创建产品配置文件,或选择适当的现有配置文件。
  4. 选择​添加用户,并使用其凭据中的email添加技术帐户。
  5. 留出时间来传播产品配置文件更改。 使用为技术帐户生成的访问令牌对AEM进行API调用。 产品配置文件将同步为AEM组,技术帐户为成员。
  6. 在适当的AEM创作实例上,打开​工具 > 安全性 > 组。 查找产品配置文件组并验证技术帐户是否出现在​ 成员 ​下。 您还可以在​工具 > 安全性 > 用户​下检查其组成员资格。
  7. 打开​设置 > 安全性 > 权限。 选择与产品配置文件对应的组,并配置API调用所需的权限。
  8. 针对应用程序访问的每个层验证所需的API调用。 仅授予集成所需的权限。
NOTE
使用OAuth服务器到服务器帐户替换JWT技术帐户时,将新帐户分配给所需的产品配置文件并验证其AEM权限。 旧技术帐户的权限不会自动转移到新帐户。

有关IMS和AEM用户和组的详细信息,请参阅IMS支持。

开发人员流程 developer-flow

对于本地测试,开发人员可以直接在AEM Developer Console中生成开发访问令牌,而无需创建OAuth服务器到服务器技术帐户。 令牌可用于调用开发人员可以访问的AEM环境。 对于无人参与服务器端应用程序,请使用OAuth服务器到服务器凭据,而不是本地开发令牌。

有关使用AEM Developer Console所需的权限,请参阅开发人员指南。

NOTE
本地开发访问令牌的有效时间最长为24小时。 过期后,使用相同方法生成另一个令牌。

生成访问令牌 generating-the-access-token

  1. 在AEM Developer Console中,转到​集成 > 本地令牌。
  2. 选择​获取本地开发令牌。

使用访问令牌调用AEM应用程序 call-the-aem-application-with-an-access-token

将本地开发访问令牌用作Authorization标头中的持有者令牌,如调用AEM API中所述。

对于在本地计算机上运行的AEM项目,不需要IMS访问令牌。

轮换客户端密钥 refresh-credentials

OAuth服务器到服务器凭据不需要每年续订证书。 定期轮换客户端密钥,并在密钥被公开时轮换客户端密钥。 创建一个新密钥,将您的应用程序切换到该密钥,然后仅撤销旧密钥。

创建和撤销密钥需要您保存的密钥值。 AEM Developer Console仅使用输入的密钥通过IMS验证请求,不会存储它。

IMPORTANT
IMS至少需要一个活动密钥。 在撤销最后一个活动密码之前,创建并验证新密码。 要完全停止使用技术帐户,请删除帐户。
  1. 创建新密钥。 在​ 集成 ​中,打开OAuth服务器到服务器帐户名称旁边的操作菜单,然后选择​新建密钥。 这是帐户级别的菜单,而不是客户端密码的行菜单。

    OAuth服务器到服务器帐户操作菜单,其中新建密钥突出显示

  2. 使用活动密钥进行身份验证。 在​ 新建密码 ​对话框中,输入帐户的活动客户端密码的值,然后选择​新建密码。

    使用活动客户端密码字段和“创建新密码”按钮突出显示的创建新密码对话框

  3. 保存新密码。 该对话框显示新密码一次,包含其clientId、secretId、clientSecret和scopes。 下载或复制它,将其安全地存储,并关闭对话框。 确认仅在安全保存机密后关闭它。 关闭对话框后,无法再次显示新密码。

    隐藏了客户端密码值的新密码对话框,突出显示“下载凭据并复制到剪贴板”

  4. 将应用程序切换到新密码。 将每个应用程序实例和部署使用的凭据中的technicalAccount.clientSecret值替换为新的clientSecret。 其他凭据值不会更改。

    使用新密钥请求新访问令牌并验证所需的AEM API调用,然后再继续。 在应用程序转换期间,这两个密钥均保持活动状态。 重用以前颁发的访问令牌不会验证新密码。

  5. 选择用于吊销的旧密码。 在所有应用程序都使用新密码后,打开旧密码的行菜单,然后选择​撤销。 检查密码ID以确保已选择旧密码。

    旧客户端密钥的“撤消”操作菜单被突出显示,但两个密钥均处于活动状态

  6. 确认吊销。 在​ 撤销客户端密钥 ​对话框中,检查要撤销的客户端密钥ID,输入该密钥的值,然后选择​撤销。 如果您不再具有机密值,请联系Adobe支持部门。 一旦吊销通过IMS传播,应用程序就无法使用该密钥来请求新令牌。 现有访问令牌可能仍然有效。

    使用客户端密钥字段和“撤消”按钮突出显示的“撤消客户端密钥”对话框

  7. 验证结果。 旧密钥列为​已吊销,而新密钥仍为​活动。

    客户端密码列表将旧密码显示为已撤销,将新密码显示为活动,同时突出显示已撤销密码的“删除”选项

    吊销生效后,请验证旧密码是否无法颁发新访问令牌,以及新密码是否能够颁发新访问令牌。 仅检查显示的状态不会验证IMS传播。

  8. 如果不再需要,请移除已吊销的密码。 要从列表中删除已撤销的密码,请打开其行菜单,选择​删除,然后进行确认。

凭据吊销 credentials-revocation

撤销​为新令牌请求禁用所选密码。 它要求撤销密码的值。 吊销可能需要一段时间才能传播。 请勿假定撤销密码会立即使已颁发的访问令牌失效。

对已吊销的密码执行​ 删除 ​会从AEM Developer Console中删除其元数据,如密码ID和吊销状态。 它不执行单独的IMS吊销,并且不可用于活动密钥。

删除技术帐户 delete-a-technical-account

删除技术帐户会立即在IMS中撤销该帐户及其所有客户端密钥。 不会为帐户下的任何凭据颁发新的访问令牌,并且使用这些凭据的集成在其当前令牌过期后停止工作。 要恢复访问,您必须创建新的技术帐户,使用其凭据更新您的应用程序,并再次在AEM中分配所需的权限。

无法撤消帐户删除。 仅在检查了哪些应用程序依赖于该帐户后确认,并且不要将其用作个人机密轮换步骤。

  1. 在​ 集成 ​中,打开技术帐户名称旁边的操作菜单,然后选择​删除。

    OAuth服务器到服务器帐户操作菜单(突出显示“删除”)

  2. 查看​ 删除技术帐户 ​对话框,然后选择​删除。

    删除技术帐户确认对话框

迁移基于JWT的集成 migrate-a-jwt-based-integration

  1. 在AEM Developer Console中创建新的OAuth服务器到服务器技术帐户。
  2. 将新的技术帐户分配给所需的产品配置文件并配置其AEM权限。
  3. 更新服务器端应用程序以使用client_credentials请求令牌,而不是签名和交换JWT。
  4. 使用新帐户验证新令牌的生成和所需的API调用。
  5. 在所有应用程序实例都使用OAuth服务器到服务器后,停用旧的JWT凭据并删除旧的技术帐户。

有关旧帐户上的证书和私钥操作,请参阅JWT旧版指南。 在验证替换集成之前,请勿删除旧帐户。

recommendation-more-help
experience-manager-cloud-service-help-main-toc