Adobe 定制CQ/AEM身份验证

Adobe 定制CQ/AEM身份验证,adobe,aem,sling,Adobe,Aem,Sling,在访问CQ publish实例上的页面时,要针对外部源对用户进行身份验证,您需要做些什么 根据我所读的内容,可以使用自定义AuthenticationHandler进行此操作。AuthenticationHandler可以配置为针对需要身份验证的路径调用,并且在extractCredentials()方法中,将针对外部源对用户进行身份验证,并返回AuthenticationInfo对象。 如果提供的凭据无效,则此方法将返回null以指示相同的凭据。然后,SlingAuthenticator将调用

在访问CQ publish实例上的页面时,要针对外部源对用户进行身份验证,您需要做些什么

根据我所读的内容,可以使用自定义AuthenticationHandler进行此操作。AuthenticationHandler可以配置为针对需要身份验证的路径调用,并且在extractCredentials()方法中,将针对外部源对用户进行身份验证,并返回AuthenticationInfo对象。 如果提供的凭据无效,则此方法将返回null以指示相同的凭据。然后,SlingAuthenticator将调用requestCredentials(),用户可以重定向到登录页面

这种理解正确吗?如果是,SlingAuthenticator如何处理从extractCredentials()返回的AuthenticationInfo对象

在某些地方,出于同样的目的,也建议使用自定义LoginModule(通过重写AbstractLoginModule)。这两种不同的方法(custom AuthenticationHandler和Loginmodule)是用于进行自定义身份验证,还是以某种方式一起使用?如果是,它们如何相互作用

此外,CUG(封闭用户组)的概念可用于在用户无权访问页面时将用户重定向到登录页面。CUG是否仍然可以与自定义身份验证机制一起使用,或者它仅在用户存在于CQ存储库中时才起作用


如果您能对此有所了解,我们将不胜感激:)

您的理解是正确的。
AuthenticationInfo
对象最终包含一个JCR用户id——但不必为用户使用JCR密码,第三方服务基本上会说“该用户已成功通过身份验证,可以作为X访问存储库”

示例:您正在使用OpenID或SAML验证用户是否为X。然后,用户X将映射到存储库中的用户Y

我没有使用过
LoginModule
,但从我的阅读来看,这只是扩展了JackRabbit repo的登录处理。因此,与使用
AuthenticationHandler
将用户重定向到其他地方并处理响应不同,您将进一步插入到链中,其中已经有
AuthenticationInfo
(或类似内容)被提供给JackRabbit,以验证并返回用户的会话

那么,假设您确实成功地使用OpenID进行了身份验证,但是您映射到的用户不存在。在这种情况下,您可以编写一个登录模块来创建用户(并将用户分配到默认组)。例如,如果用户带着gmail id进来,JCR用户可能是
gmail\uu$id
。登录模块看到名称以
gmail
开头,就会知道可以自动创建该用户

就CUG而言,是的,以上所有内容都可以与之结合使用。基本上,如果一个请求没有访问资源的权限,并且该请求还没有经过身份验证,那么身份验证处理系统就会启动。如果用户已通过身份验证,但仍然无法访问资源(例如,不属于可以读取资源的组),则将生成403