无法使用 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 客户端配置为使用代理(我猜:proxyReceptorUrl
和 proxyCallbackUrl
属性)
【讨论】:
我认为这些是遵循此特定 CAS 客户端的配置文档所必需的。删除它们,它立即工作。再次感谢您!以上是关于无法使用 grails 通过 CAS 单点登录登录的主要内容,如果未能解决你的问题,请参考以下文章