无法使用 grails 通过 CAS 单点登录登录

Posted

技术标签:

【中文标题】无法使用 grails 通过 CAS 单点登录登录【英文标题】:Unable to login through CAS Single Sign-on using grails 【发布时间】:2015-03-20 11:37:52 【问题描述】:

我正在使用具有 spring security 核心和 spring security CAS 插件的 grails 应用程序。我已经设置了一个带有数据库身份验证的 jasig CAS 服务器。到目前为止,如果我使用数据库中的用户直接通过 CAS 登录,它工作正常。

我遇到的问题是当我尝试从 grails 应用程序登录时。我成功地被重定向到 CAS 页面,登录后,我被发送回我的 grails 应用程序,并显示凭据错误。

在 CAS 服务器的 tomcat 日志中,我有这个踪迹:

2015-01-21 10:55:59,182 WARN [org.jasig.cas.authentication.PolicyBasedAuthenticationManager] - <Cannot find authentication handler that supports http://localhost:8080/myGrailsApp/secure/receptor, which suggests a configuration problem.>

以下是我在 grails 中的设置:

grails.plugin.springsecurity.cas.serverUrlPrefix = 'https://localhost:8443/cas'
grails.plugin.springsecurity.cas.loginUri = '/login'
grails.plugin.springsecurity.cas.proxyReceptorUrl = '/secure/receptor'
grails.plugin.springsecurity.cas.serviceUrl = 'http://localhost:8080/myGrailsApp/j_spring_cas_security_check'
grails.plugin.springsecurity.cas.proxyCallbackUrl = 'http://localhost:8080/myGrailsApp/secure/receptor'

这是一个现有项目,具有有效的 spring 安全性,我们已经使用了一段时间,现在正试图将其移至单点登录。

我的 CAS 服务器或 grails 应用程序中缺少什么设置?我已经按照default setup for database auth handler 设置了我的 CAS 服务器。

感谢您的帮助!

【问题讨论】:

您能否发布您的 Spring Security + CAS 的完整配置,好吗?我将与我的配置进行比较。我在两个 grails 应用程序中成功使用了 Spring Security + CAS。 Grails 2.2.5 中的一个应用程序和 2.4.3 中的另一个应用程序。我的 CAS 服务器针对 Active Directory 服务器进行身份验证,但我认为这一事实与您的问题无关。看起来这是您必须在 CAS 服务器中进行的配置。 看起来我不需要 grails 配置中的 proxy url。我删除了这些,它马上就起作用了。我还没有深入了解 CAS 服务器或 grails 插件的客户端实现,我认为这些配置是必要的。感谢您以任何一种方式进行调查! 【参考方案1】:

您真的需要使用 CAS 代理功能吗?因为 CAS 错误表明 CAS 服务器未配置为处理代理回调,而您的 CAS 客户端配置为使用代理(我猜:proxyReceptorUrlproxyCallbackUrl 属性)

【讨论】:

我认为这些是遵循此特定 CAS 客户端的配置文档所必需的。删除它们,它立即工作。再次感谢您!

以上是关于无法使用 grails 通过 CAS 单点登录登录的主要内容,如果未能解决你的问题,请参考以下文章

单点登录CAS使用记:实现自定义验证用户登录

开源单点登录系统CAS入门

CAS单点登录系统入门--分布式登录验证

CAS单点登录服务器搭建

单点登录CAS使用记:使用maven的overlay实现无侵入的改造CAS

cas单点登录怎么在服务器端获得用户信息