AEM身份验证是无状态的

Is AEM authentication Stateless

AEM 身份验证(封闭用户组)是无状态的吗?如果我们有多个发布者会发生什么情况,身份验证处理程序是否会确保用户在发布者的所有实例中都经过身份验证?

无法找到证实这一点的文件,因此非常感谢您的帮助。

谢谢。

默认的 AEM 身份验证(CRX 登录模块)不是无状态的,身份验证由登录令牌确认。当用户登录时,令牌信息存储在相应用户节点(/home/users)的.tokens节点下。令牌的值也作为 cookie login-token 存储在浏览器中。每当请求进来时,都会比较存储库中的 cookie 值和令牌。[ 可以通过删除.tokens节点,刷新一些匿名无法访问的页面来测试 ]

在多发布者环境中,仅在用户登录的实例上创建令牌。由于其他实例无法在其存储库中找到 cookie 值的令牌,请求将被拒绝。

如果您启用粘性会话,特定客户端的所有请求将始终定向到同一实例。

这是 Oak's token module . AEM uses crx token module but how they work is essentially same. Since your credentials are passed to a single instance by a form based authentication handler 上的一个页面,令牌仅在一个实例中创建。身份验证处理程序页面还包含有关令牌和 cookie 的一些详细信息。

UPDATE: With AEM 6.1 , the authentication can now be made stateless as long as the user exists on all the publish instances. This is done by using a encrypted cookie that can be decrypted by all publish instances when they share the same HMAC key. More information can be found here : https://docs.adobe.com/docs/en/aem/6-1/administer/security/encapsulated-token.html

我认为如果您在您的作者上激活集群,.token 节点将被复制到所有实例,并且在比较用户令牌资源和 cookie 时识别成功,这是好处之一jcr 理念:一切皆有内容

在 OSGI 中启用封装令牌选项。然后它将无缝地进行身份验证。但是有两个先决条件或条件才能让它发挥作用。一是在所有实例上放置相同的 HMAC 密钥,二是用户应该存在。如果满足这两个条件,那么如果您在一个堆栈上登录,第二个堆栈将不再需要身份验证。