自定义CQ / AEM身份验证

时间:2015-08-20 02:54:58

标签: adobe cq5 aem sling

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

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

这种理解是否正确?如果是这样,SlingAuthenticator对从extractCredentials()返回的AuthenticationInfo对象做了什么?

在某些地方,为了同样的目的,也建议使用自定义LoginModule(通过覆盖AbstractLoginModule)。这两种不同的方法(自定义AuthenticationHandler和Loginmodule)是否具有自定义身份验证,或者它们是否以某种方式一起使用?如果是这样,他们如何互动?

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

任何关于此的灯都会非常感激:)

1 个答案:

答案 0 :(得分:1)

您的理解是正确的。 AuthenticationInfo对象最终包含JCR用户ID - 但不是必须为用户使用JCR密码,第三方服务基本上说"此用户已成功验证并可以作为X&访问存储库#34;

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

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

因此,我们假设您使用OpenID成功进行了身份验证,但您映射到的用户并不存在。在这种情况下,您可以编写一个登录模块来创建用户(并将用户分配给默认组)。例如,如果用户使用gmail ID,则JCR用户可以是gmail_$id。登录模块看到名称以gmail开头,知道可以自动创建该用户。

就CUG而言,是的,以上所有内容都可以与之结合使用。基本上,如果请求无法访问资源且请求未经过身份验证,则身份验证处理系统会启动。如果用户已经过身份验证但仍无法访问资源(例如,不是可以阅读它的组的一部分),将生成403。