CAS 6.6.6/6.6.7嵌入式Tomcat下TGC域名配置登录异常求助
CAS 6.6.x嵌入式Tomcat下TGC域名配置与SSO兼容解决方案
针对CAS 6.6.6/6.6.7版本使用嵌入式Tomcat时的TGC域名配置矛盾问题,提供两种可行的嵌入式容器解决方案:
方案一:替换Tomcat的Cookie处理器为LegacyCookieProcessor
嵌入式Tomcat默认使用Rfc6265CookieProcessor,不允许域名带前缀点,但CAS文档推荐的带前缀点配置是为了兼容旧版浏览器的跨子域Cookie规则。通过自定义配置替换Cookie处理器,即可保留带前缀点的域名配置并实现SSO:
创建Spring配置类,修改Tomcat的Cookie处理器:
import org.apache.catalina.Context; import org.apache.tomcat.util.http.LegacyCookieProcessor; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class TomcatCookieConfig { @Bean public WebServerFactoryCustomizer<TomcatServletWebServerFactory> cookieProcessorCustomizer() { return factory -> factory.addContextCustomizers( context -> context.setCookieProcessor(new LegacyCookieProcessor()) ); } }
配置完成后,保持CAS的TGC域名设置为cas.tgc.domain=.my-boring-website.com,重启服务器即可正常实现跨子域SSO。
方案二:适配RFC 6265标准配置(无需修改Cookie处理器)
如果不想替换默认的Cookie处理器,可遵循RFC 6265标准调整CAS配置,同样能实现跨子域SSO:
- 将TGC域名改为无前缀点的格式:
cas.tgc.domain=my-boring-website.com
- 补充以下Cookie配置,确保跨子域共享的正确性:
cas.tgc.path=/ cas.tgc.secure=true cas.tgc.http-only=true cas.tgc.same-site=None
注意:此方案要求所有需要SSO的子域应用(如app.my-boring-website.com、www.my-boring-website.com)都属于
my-boring-website.com的二级域名体系,且客户端的CAS配置需与服务器保持域名规则一致。
验证方法
- 登录CAS后,在浏览器开发者工具的Cookie面板中,检查TGC的
Domain属性是否符合配置预期 - 访问子域应用,确认是否自动完成SSO跳转,无需重新登录
内容的提问来源于stack exchange,提问作者Daniel Maldonado
相关产品推荐
相关产品推荐

