1

我为几个应用程序设置了 Spring Jasig CAS SSO。这使用CasAuthenticationFilter. 所以我设置了这样的网络应用程序 -

Cas Server (Cas 3.5.2) - Cas.war,App1 - App1.warApp2 - App2.war. 应用程序使用 Spring 3.2.3 和 Spring Security 3.1.4.RELEASE。

Spring Security Config: http: //pastie.org/private/qxcx1h8i9ys0w3lmwegiw

使用此设置似乎可以正常工作。现在,当我在 Cas 服务器上启用 OAuth(不是通过 Spring Cas)时,我无法将该身份验证与我设置的通常基于表单的身份验证集成。Facebook OAuth 集成似乎工作正常,因为我可以看到在日志中成功检索到 Facebook 个人资料属性。问题是发布 facebook 登录后,CasAuthenticationFilter 尝试使用类似的基于表单的登录机制对用户“FacebookProfile#XYZXYZ”进行身份验证,显然它没有在用户的数据库表中找到该用户。我的猜测是我需要编写一个自定义过滤器,该过滤器AbstractPreAuthenticatedProcessingFilter在之前扩展并带有位置PRE_AUTH_FILTER(检查上面的粘贴配置)并且应该以某种方式设置Authentication正确,所以CasAuthenticationFilter应该知道用户已经登录。

这是根据CasAuthenticationFilter日志验证的 URL -/j_spring_cas_security_proxyreceptor?pgtIou=PGTIOU-1-pR9r9LVJvB5EkezbMJHN-talenteye.in&pgtId=TGT-2-QXvAHIRciBNR9HU5FOvpOaHcJaBj5OJTUPPz5ZwA7yK1xH54iL-myorg.in

requiresAuthentication的实现CasAuthenticationFilter看起来像这样:

protected boolean requiresAuthentication(final HttpServletRequest request, final HttpServletResponse response) {
    final boolean serviceTicketRequest = serviceTicketRequest(request, response);
    final boolean result = serviceTicketRequest || proxyReceptorRequest(request) || (proxyTicketRequest(serviceTicketRequest, request));
    if(logger.isDebugEnabled()) {
        logger.debug("requiresAuthentication = "+result);
    }
    return result;
}

日志说 -

19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter -     serviceTicketRequest = false
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - proxyReceptorConfigured = true
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - proxyReceptorRequest = true
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - requiresAuthentication = true
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - Request is to process authentication
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - proxyReceptorConfigured = true
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - proxyReceptorRequest = true
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - Responding to proxy receptor request

我对如何使这项工作一起工作感到困惑。我想知道我是不是把事情复杂化了。任何指示都会非常有帮助,因为我已经在这上面浪费了几天时间。

4

1 回答 1

1

我自己解决了这个问题,因此在这里为其他面临类似问题的人发帖。

使用 CAS 的全部意义在于集中认证。我编写了一个扩展的自定义类AbstractCasAssertionUserDetailsService。这不会进行身份验证。它必须在 CAS 服务器上完成。这只是准备一个UserDetails供 CAS 客户端 Web 应用程序使用的对象。因此,在我的情况下不需要 PRE-AUTH。此外,我摆脱了不需要的代理受体配置。现在效果很好。

于 2013-10-23T10:26:19.160 回答