我为几个应用程序设置了 Spring Jasig CAS SSO。这使用CasAuthenticationFilter
. 所以我设置了这样的网络应用程序 -
Cas Server (Cas 3.5.2) - Cas.war
,App1 - App1.war
和App2 - 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
我对如何使这项工作一起工作感到困惑。我想知道我是不是把事情复杂化了。任何指示都会非常有帮助,因为我已经在这上面浪费了几天时间。