为服务器端API生成访问令牌 generating-access-tokens-for-server-side-apis
某些架构依赖于从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、私钥或证书。
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环境管理员角色的用户可以查看帐户的详细信息(不包括客户端密钥)。
服务器到服务器流涉及以下步骤:
- 创建OAuth服务器到服务器技术帐户并保存其凭据,包括在创建过程中显示的客户端密钥。
- 将凭据安全地存储在向AEM发出请求的服务器上。
- 使用客户端ID、客户端密钥和范围从IMS请求访问令牌。
- 配置技术帐户的产品配置文件和AEM权限。
- 使用访问令牌作为持有者令牌调用AEM API。
创建技术帐户并检索其凭据 fetch-the-aem-as-a-cloud-service-credentials
-
打开集成。 为应用程序访问的环境打开AEM Developer Console,然后选择集成。 选择创建新的技术帐户。
-
创建技术帐户。 在该对话框中,选择 OAuth服务器到服务器(S2S) 作为凭据类型,然后选择创建。
-
保存客户端密钥。 保存客户端密钥对话框显示凭据,包括
technicalAccount.clientSecret。 选择 下载凭据 以将凭据另存为aem-s2s-credentials.json,或选择复制到剪贴板。 将凭据存储在机密管理器或应用程序的其他受访问控制的位置。
选择关闭。 在 Close中,如果无法进一步访问您的密码 确认对话框,请选择Close,但只有在安全保存密码之后。 关闭对话框后,密码无法再次显示。
-
审阅技术帐户。 列出新的OAuth服务器到服务器帐户及其 活动 客户端密钥。 列表中显示的密码ID用于标识密码。 它不是机密值,无法在令牌请求中用作
client_secret。
若要稍后查看密码的详细信息,请打开客户端密码的行菜单,然后选择查看。 “凭据”对话框显示IMS端点、范围、客户端ID、技术帐户电子邮件、密码ID和吊销状态。 它不显示客户端密钥值。
在非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_typeclient_credentialsclient_idtechnicalAccount.clientId。client_secrettechnicalAccount.clientSecret。scopescopes中的值,用逗号连接。对每个表单值进行URL编码。 在请求正文中发送密钥,而不是在URL或查询字符串中发送密钥。
响应包括access_token、token_type和expires_in。 使用access_token调用AEM。 expires_in值是令牌生命周期,以秒为单位。 使用该值,而不是假定固定的过期时间。
缓存并重用访问令牌,直到其接近过期时间,然后使用相同的客户端凭据请求新令牌。 此授权不需要JWT交换或刷新令牌。
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
- 打开Adobe Admin Console。
- 选择 产品和服务 下的AEM as a Cloud Service。
- 为集成创建产品配置文件,或选择适当的现有配置文件。
- 选择添加用户,并使用其凭据中的
email添加技术帐户。 - 留出时间来传播产品配置文件更改。 使用为技术帐户生成的访问令牌对AEM进行API调用。 产品配置文件将同步为AEM组,技术帐户为成员。
- 在适当的AEM创作实例上,打开工具 > 安全性 > 组。 查找产品配置文件组并验证技术帐户是否出现在 成员 下。 您还可以在工具 > 安全性 > 用户下检查其组成员资格。
- 打开设置 > 安全性 > 权限。 选择与产品配置文件对应的组,并配置API调用所需的权限。
- 针对应用程序访问的每个层验证所需的API调用。 仅授予集成所需的权限。
有关IMS和AEM用户和组的详细信息,请参阅IMS支持。
开发人员流程 developer-flow
对于本地测试,开发人员可以直接在AEM Developer Console中生成开发访问令牌,而无需创建OAuth服务器到服务器技术帐户。 令牌可用于调用开发人员可以访问的AEM环境。 对于无人参与服务器端应用程序,请使用OAuth服务器到服务器凭据,而不是本地开发令牌。
有关使用AEM Developer Console所需的权限,请参阅开发人员指南。
生成访问令牌 generating-the-access-token
- 在AEM Developer Console中,转到集成 > 本地令牌。
- 选择获取本地开发令牌。
使用访问令牌调用AEM应用程序 call-the-aem-application-with-an-access-token
将本地开发访问令牌用作Authorization标头中的持有者令牌,如调用AEM API中所述。
对于在本地计算机上运行的AEM项目,不需要IMS访问令牌。
轮换客户端密钥 refresh-credentials
OAuth服务器到服务器凭据不需要每年续订证书。 定期轮换客户端密钥,并在密钥被公开时轮换客户端密钥。 创建一个新密钥,将您的应用程序切换到该密钥,然后仅撤销旧密钥。
创建和撤销密钥需要您保存的密钥值。 AEM Developer Console仅使用输入的密钥通过IMS验证请求,不会存储它。
-
创建新密钥。 在 集成 中,打开OAuth服务器到服务器帐户名称旁边的操作菜单,然后选择新建密钥。 这是帐户级别的菜单,而不是客户端密码的行菜单。
-
使用活动密钥进行身份验证。 在 新建密码 对话框中,输入帐户的活动客户端密码的值,然后选择新建密码。
-
保存新密码。 该对话框显示新密码一次,包含其
clientId、secretId、clientSecret和scopes。 下载或复制它,将其安全地存储,并关闭对话框。 确认仅在安全保存机密后关闭它。 关闭对话框后,无法再次显示新密码。
-
将应用程序切换到新密码。 将每个应用程序实例和部署使用的凭据中的
technicalAccount.clientSecret值替换为新的clientSecret。 其他凭据值不会更改。使用新密钥请求新访问令牌并验证所需的AEM API调用,然后再继续。 在应用程序转换期间,这两个密钥均保持活动状态。 重用以前颁发的访问令牌不会验证新密码。
-
选择用于吊销的旧密码。 在所有应用程序都使用新密码后,打开旧密码的行菜单,然后选择撤销。 检查密码ID以确保已选择旧密码。
-
确认吊销。 在 撤销客户端密钥 对话框中,检查要撤销的客户端密钥ID,输入该密钥的值,然后选择撤销。 如果您不再具有机密值,请联系Adobe支持部门。 一旦吊销通过IMS传播,应用程序就无法使用该密钥来请求新令牌。 现有访问令牌可能仍然有效。
-
验证结果。 旧密钥列为已吊销,而新密钥仍为活动。
吊销生效后,请验证旧密码是否无法颁发新访问令牌,以及新密码是否能够颁发新访问令牌。 仅检查显示的状态不会验证IMS传播。
-
如果不再需要,请移除已吊销的密码。 要从列表中删除已撤销的密码,请打开其行菜单,选择删除,然后进行确认。
凭据吊销 credentials-revocation
撤销为新令牌请求禁用所选密码。 它要求撤销密码的值。 吊销可能需要一段时间才能传播。 请勿假定撤销密码会立即使已颁发的访问令牌失效。
对已吊销的密码执行 删除 会从AEM Developer Console中删除其元数据,如密码ID和吊销状态。 它不执行单独的IMS吊销,并且不可用于活动密钥。
删除技术帐户 delete-a-technical-account
删除技术帐户会立即在IMS中撤销该帐户及其所有客户端密钥。 不会为帐户下的任何凭据颁发新的访问令牌,并且使用这些凭据的集成在其当前令牌过期后停止工作。 要恢复访问,您必须创建新的技术帐户,使用其凭据更新您的应用程序,并再次在AEM中分配所需的权限。
无法撤消帐户删除。 仅在检查了哪些应用程序依赖于该帐户后确认,并且不要将其用作个人机密轮换步骤。
-
在 集成 中,打开技术帐户名称旁边的操作菜单,然后选择删除。
-
查看 删除技术帐户 对话框,然后选择删除。
迁移基于JWT的集成 migrate-a-jwt-based-integration
- 在AEM Developer Console中创建新的OAuth服务器到服务器技术帐户。
- 将新的技术帐户分配给所需的产品配置文件并配置其AEM权限。
- 更新服务器端应用程序以使用
client_credentials请求令牌,而不是签名和交换JWT。 - 使用新帐户验证新令牌的生成和所需的API调用。
- 在所有应用程序实例都使用OAuth服务器到服务器后,停用旧的JWT凭据并删除旧的技术帐户。
有关旧帐户上的证书和私钥操作,请参阅JWT旧版指南。 在验证替换集成之前,请勿删除旧帐户。