首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Grails插件重定向循环

用Grails插件重定向循环
EN

Stack Overflow用户
提问于 2014-01-04 00:29:46
回答 2查看 2.3K关注 0票数 5

我正在处理一个涉及CAS服务器的项目,它与其他使用单点登录(SSO)的基于spring的项目一起工作,但我正在接收一个涉及Grails spring-security-cas插件的重定向循环(版本:“security cas:2.0-rc1”)。我看过插件文档了。我知道CAS重定向问题似乎很常见,但我还没有找到与这种情况相关的帖子。我是新的圣杯和中科院的世界,所以提前感谢您的任何推动的正确方向。

使用适当的服务参数: https:// example.com:8443/ CAS / login ? service =http:// example.com:8080/grailsapp/j_spring_cas_security_check,最初访问grails应用程序上的安全页面时正确地重定向到cas服务器登录页

问题发生在用户成功登录并重新定向到服务之后。grails应用程序中的j_spring_cas_security_check将重定向回https://example.com:8443/cas登录页面,该页面将看到TGC并将其重定向回服务j_spring_cas_security_check页面,该页面将无限重定向,直到浏览器给出重定向循环错误为止。看起来,每次迭代都会创建新的服务票证。

我的Config.groovy有:

代码语言:javascript
复制
grails.plugin.springsecurity.cas.loginUri = /login
grails.plugin.springsecurity.cas.serviceUrl = http://example.com:8080/grailsapp/j_spring_cas_security_check
grails.plugin.springsecurity.cas.serverUrlPrefix = https://example.com:8443/cas
# we aren't using cas with proxy
# logout details not shown here

基于其他问题/答案已尝试的失败尝试:

  • 我认为问题不在于cas服务器:当我直接进入另一个已经使用CAS的项目时,他们检测到了票证cookie并登录得很好,而不必再次进行身份验证。
  • SSL证书是自签名的,并且已经添加到Java的仙人掌存储区。不发生SSLHandshake或与证书相关的异常等.
  • 这并不是像问题19710841那样糟糕的凭据或代理情况,但我已经尝试将/j_spring_cas_security_check添加到注释staticRules中,但得到了相同的循环。

cas服务器的日志包括:

代码语言:javascript
复制
=============================================================
WHO: [username: sampleuser]
WHAT: supplied credentials: [username: sampleuser]
ACTION: AUTHENTICATION_SUCCESS
APPLICATION: CAS
WHEN: Fri Jan 03 23:52:41 GMT 2014
CLIENT IP ADDRESS: XXX.XXX.XXX.XXX
SERVER IP ADDRESS: example.com
=============================================================
=============================================================
WHO: [username: sampleuser]
WHAT: TGT-24-Rttmt5i5raWcV1Z5wZavVopigQc4xeIckEUfMKdG3EwEzI3LUI-cas.service
ACTION: TICKET_GRANTING_TICKET_CREATED
APPLICATION: CAS
WHEN: Fri Jan 03 23:52:41 GMT 2014
CLIENT IP ADDRESS: XXX.XXX.XXX.XXX
SERVER IP ADDRESS: example.com
=============================================================

INFO [org.jasig.cas.CentralAuthenticationServiceImpl] - <Granted service ticket [ST-77-cneJOIwmnoOdKqkscaiy-cas.service] for service [http://example.com:8080/grailsapp/j_spring_cas_security_check] for user [sampleuser]>

####### FIRST ITERATION OF LOOP BELOW #############

=============================================================
WHO: sampleuser
WHAT: ST-77-cneJOIwmnoOdKqkscaiy-cas.service for http://example.com:8080/grailsapp/j_spring_cas_security_check
ACTION: SERVICE_TICKET_CREATED
APPLICATION: CAS
WHEN: Fri Jan 03 23:52:41 GMT 2014
CLIENT IP ADDRESS: XXX.XXX.XXX.XXX
SERVER IP ADDRESS: example.com
=============================================================
=============================================================
WHO: audit:unknown
WHAT: ST-77-cneJOIwmnoOdKqkscaiy-cas.service
ACTION: SERVICE_TICKET_VALIDATED
APPLICATION: CAS
WHEN: Fri Jan 03 23:52:41 GMT 2014
CLIENT IP ADDRESS: 127.0.0.1
SERVER IP ADDRESS: example.com
=============================================================

DEBUG [org.jasig.cas.web.flow.InitialFlowSetupAction] - <Placing service in FlowScope: http://example.com:8080/grailsapp/j_spring_cas_security_check>
INFO [org.jasig.cas.CentralAuthenticationServiceImpl] - <Granted service ticket [ST-78-6qsbaVNNOess4VhGOQE4-cas.service] for service [http://example.com:8080/grailsapp/j_spring_cas_security_check] for user [sampleuser]>

####### SERVICE_TICKET_CREATED and SERVICE_TICKET_VALIDATED LOOP CONTINUES A FEW MORE TIMES BEFORE BROWSER GIVES UP #############
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-09 17:40:56

问题是,在Grails客户机中,我没有创建userDetailsService。我在Grails的服务文件夹中实现了一个自定义类(请参阅http://grails-plugins.github.io/grails-spring-security-core/guide/userDetailsService.html):

代码语言:javascript
复制
public class MyUserDetailsService implements UserDetailsService {
    // Required methods here
}

然后在resources.groovy中引用这一点:

代码语言:javascript
复制
beans = {
    userDetailsService(MyUserDetailsService)
}
票数 2
EN

Stack Overflow用户

发布于 2014-02-28 18:21:01

除了覆盖UserDetailsService之外,我还必须在Config.groovy中配置filterProcessesUrl

代码语言:javascript
复制
grails.plugin.springsecurity.cas.filterProcessesUrl = "/user/login" // same as uri part of serviceUrl
grails.plugin.springsecurity.cas.serviceUrl = "http://yoursite.com/user/login"

使CasAuthenticationFilter在CAS上进行身份验证后启动。以下是源代码参考链接:

您还可以查看CasAuthenticationFilter.java的源代码,请参阅serviceTicketRequestsuper.requiresAuthentication方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20915211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档