封装的令牌支持

简介

默认情况下,AEM使用令牌身份验证处理程序对每个请求进行身份验证。 但是,为了提供身份验证请求,令牌身份验证处理程序需要对每个请求都访问存储库。 这是因为使用cookies来维护身份验证状态。 逻辑上,状态需要保留在存储库中,以验证后续请求。 实际上,这意味着身份验证机制是有状态的。

这对于水平可伸缩性尤为重要。 在多实例设置中,如下图所示的发布场,无法以最佳方式实现负载平衡。 使用状态身份验证时,保留的身份验证状态仅在用户首次通过身份验证的实例上可用。

chlimage_1-33

以下场景为例:

用户可以在发布实例1上对用户进行身份验证,但如果后续请求转到发布实例2,则该实例不具有持久的身份验证状态,因为该状态在发布实例1的存储库中被保留,而发布实例2具有其自己的存储库。

解决方案是在负载平衡器级别配置粘贴连接。 使用粘滞连接时,用户始终被定向到同一发布实例。 因此,不可能实现真正最优的负载平衡。

如果发布实例不可用,在该实例上经过身份验证的所有用户都将丢失其会话。 这是因为验证Cookie需要存储库访问。

使用封装的令牌进行无状态身份验证

水平可伸缩性的解决方案是使用AEM中新的封装令牌支持进行无状态身份验证。

封装令牌是一种密码术,它允许AEM安全地创建和验证脱机身份验证信息,而无需访问存储库。 这样,就可以在所有发布实例上发生身份验证请求,无需粘滞连接。 它还具有提高身份验证性能的优势,因为每次身份验证请求都不需要访问存储库。

您可以在下面的MongoMK作者和TarMK发布实例中了解这在地理上分布的部署中的工作方式:

chlimage_1-34

注意

请注意,封装令牌与身份验证相关。 它确保无需访问存储库即可验证Cookie。 但是,仍然需要用户存在于所有实例中,并且每个实例都可以访问存储在该用户下的信息。

例如,如果根据封装令牌的工作方式在发布实例编号1上创建了新用户,则将在发布实例编号2上成功对其进行身份验证。 如果第二个发布实例上不存在该用户,则请求仍不成功。

配置封装令牌

注意

只有在以下情况下,才能使用同步用户和依赖令牌身份验证(如SAML和OAuth)的所有身份验证处理程序才能使用封装的令牌:

  • 会话粘滞已启用,或

  • 同步开始时,已在AEM中创建用户。 这意味着在同步过程中,如果处理程序​创建​用户,将不支持封装令牌。

在配置封装令牌时,您需要考虑以下几点:

  1. 由于涉及密码,所有实例都需要具有相同的HMAC密钥。 自AEM 6.3以来,关键材料不再存储在存储库中,而存储在实际的文件系统中。 考虑到这一点,复制密钥的最佳方法是将它们从源实例的文件系统复制到要复制密钥的目标实例的文件系统。 请参阅下面的“复制HMAC密钥”下的更多信息。
  2. 需要启用封装令牌。 这可以通过Web控制台完成。

复制HMAC密钥

HMAC密钥作为/etc/key的二进制属性存在于存储库中。 您可以通过按下视图旁的​链接​单独下载它:

chlimage_1-35

为了跨实例复制密钥,您需要:

  1. 访问AEM实例,通常是包含要复制的关键材料的作者实例;

  2. 在本地文件系统中找到com.adobe.granite.crypto.file包。 例如,在此路径下:

    • <author-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21

    每个文件夹中的bundle.info文件将标识捆绑名称。

  3. 导航到数据文件夹。 例如:

    • <author-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21/data
  4. 复制HMAC和主控文件。

  5. 然后,转到要将HMAC密钥重复到的目标实例,并导航到数据文件夹。 例如:

    • <publish-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21/data
  6. 粘贴之前复制的两个文件。

  7. 如果目标 实例已运行,请刷新Crypto Bundle。

  8. 对要将密钥复制到的所有实例重复上述步骤。

启用封装令牌

复制HMAC密钥后,您可以通过Web控制台启用封装令牌:

  1. 将浏览器指向https://serveraddress:port/system/console/configMgr
  2. 查找名为​Day CRX令牌身份验证处理程序​的条目,然后单击它。
  3. 在以下窗口中,勾选​启用封装的令牌支持​框,然后按​保存

在此页面上