Grails SpringSecurity CAS не перенаправляет на targetUrl после аутентификации

#grails #spring-security

#grails #spring-безопасность

Вопрос:

Я настроил простой сайт Grails (использует SSL) на localhost, настроил spring security и настроил пользователей с помощью s2-quickstart. Затем я настроил его на использование аутентификации сервера CAS. Похоже, что он проходит проверку подлинности в соответствии с журналами CAS, но после аутентификации продолжает возвращаться на страницу index.gsp приложения grails вместо запрошенного URL. Вот конфигурация в application.groovy.

 // Added by the Spring Security Core plugin:  
grails.plugin.springsecurity.userLookup.userDomainClassName = 'com.helloworld.SecUser'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'com.helloworld.SecUserSecRole'
grails.plugin.springsecurity.authority.className = 'com.helloworld.SecRole'

grails.plugin.springsecurity.providerNames = ['casAuthenticationProvider']

grails.plugin.springsecurity.cas.active = true
grails.plugin.springsecurity.cas.sendRenew = false
grails.plugin.springsecurity.cas.loginUri = '/login'
grails.plugin.springsecurity.cas.serviceUrl = 'https://localhost:8080/'
grails.plugin.springsecurity.cas.serverUrlPrefix = 'https://localhost:8443/cas'
grails.plugin.springsecurity.cas.serverUrlEncoding = 'UTF-8'
grails.plugin.springsecurity.cas.key = 'grails-spring-security-cas'
grails.plugin.springsecurity.cas.artifactParameter = 'ticket'
grails.plugin.springsecurity.cas.serviceParameter = 'service'
grails.plugin.springsecurity.cas.filterProcessesUrl = '/j_spring_cas_security_check'
grails.plugin.springsecurity.cas.proxyCallbackUrl = 'https://localhost:8080/secure/receptor'
grails.plugin.springsecurity.cas.proxyReceptorUrl = '/secure/receptor'
grails.plugin.springsecurity.cas.useSingleSignout = true


grails.plugin.springsecurity.cas.logout.afterLogoutUrl = 'https://localhost:8443/cas/logout?url=https://localhost:8080/logout'

grails.plugin.springsecurity.logout.postOnly = false

  grails.plugin.springsecurity.successHandler.alwaysUseDefaultTargetUrl = false

grails.plugin.springsecurity.interceptUrlMap = [
    '/js/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/css/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/images/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/login/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/logout/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/secure/receptor': ['IS_AUTHENTICATED_ANONYMOUSLY'],  // <- allows CAS to contact the receptor
    '/**': ['IS_AUTHENTICATED_FULLY']
]
  

Можете ли вы подсказать, что не так?

Ответ №1:

Хм, grails.значение plugin.springsecurity.cas.serviceUrl должно заканчиваться на /j_spring_cas_security_check .

Мы используем:

 grails.plugin.springsecurity.cas.active = true
grails.plugin.springsecurity.cas.loginUri = "/login"
grails.plugin.springsecurity.cas.serverUrlPrefix = "<cas server url>"
grails.plugin.springsecurity.cas.serviceUrl = "<grails server url>/j_spring_cas_security_check"
grails.plugin.springsecurity.cas.proxyCallbackUrl = null
grails.plugin.springsecurity.cas.proxyReceptorUrl = null
  

Я также счел полезным изначально использовать минимальную конфигурацию, чтобы все заработало. Я заблокировал свой сервер grails, перенастроив различные плагины на то, что я считал хорошими значениями с самого начала, много раз.

Комментарии:

1. привет, спасибо за ответ… я удалил все из application.groovy, кроме приведенного выше и первых трех строк из spring security.

2. продолжает цикл между localhost: 8443 / cas / … и localhost: 8080 / …

3. Странно. Я использую эти настройки с локальным сервером CAS Jasig, развернутым на localhost: 8443 / cas (значение URL моего сервера cas). loginUri — это просто «/ login». Мы также устанавливаем grails. plugin.springsecurity.useSessionFixationPrevention = false.

4. может ли это быть связано с interceptUrlMap, controllerAnnotations или FilterChain.ChainMap?