2014-05-14 16 views
3

프로젝트에서 Grails (2.2.2)를 사용하고 있으며 애플리케이션이 https 리디렉션 대신 바람직하지 않은 http 리디렉션을 실행합니다.HTTPS 프로토콜을 사용하여 리다이렉트 전용 Grails/Weblogic

현재 Oracle Weblogic 앞에 F5로드 밸런서가 있습니다. F5가 우리의 SSL을 Weblogic에서 내리고 있습니다. F5는 https 요청 만 허용하고 Weblogic은 HTTP 요청 만 허용합니다.

My Grails 프로젝트는 스프링 보안 및 스프링 시큐리티 CAS 플러그인을 사용합니다.

일반적으로 CAS 로그인 성공시 문제가 발생합니다. Grails는 항상 HTTP 리디렉션을 실행하는 것으로 보입니다.

내 serverURL은 모든 CAS 구성 변수를 HTTPS로 지정합니다. like

grails.serverURL = "https://example.com/${appName}" 

강제로 GRAPS/Weblogic에서 https 리디렉션 만 실행하도록 할 수있는 방법이 있습니까?

편집 # 1 - 또한 내가 행운과 함께이 일을 해봤

정보

:

grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true 
grails.plugin.springsecurity.secureChannel.definition = [ 
    '/**': 'REQUIRES_SECURE_CHANNEL' 
] 
grails.plugin.springsecurity.portMapper.httpPort = 80 
grails.plugin.springsecurity.portMapper.httpsPort = 443 
grails.plugin.springsecurity.secureChannel.secureHeaderName = 'WL-Proxy-SSL' 
grails.plugin.springsecurity.secureChannel.secureHeaderValue = 'http' 
grails.plugin.springsecurity.secureChannel.insecureHeaderName = 'WL-Proxy-SSL' 
grails.plugin.springsecurity.secureChannel.insecureHeaderValue = 'https' 

또한, 동작이 봄 보안/봄 CAS 플러그인과 관련이있을 수 있습니다 것 같아 프로토콜을 준수하지 않음

j_spring_security_check 이후에 발생하는 리디렉션은 https 리디렉션 대신 항상 http 리디렉션을 반환합니다. F5 서버에서 HTTP 요청을 허용하지 않기 때문에 문제가 발생합니다. I.E. 구성 CAS 플러그인에 대한

https://www.example.com/grailsapp/ 
-> 
https://www.casserver.com/cas/login?service=https%3A%2F%2Fwww.example.com%2Fgrailsapp%2Fj_spring_cas_security_check 
-> https://www.example.com/grailsapp/j_spring_cas_security_check;jsessionid=f6T8RyDZ83Z2QQQlMQ7fGXvlrs05m9hTjlBkndD6stBh1s20v2ZH!-1677111548?ticket=ST-231-4Dl5PVDe4RRLpAW5CEXb-www.casserver.com 
-> 
http://www.example.com/grailsapp/ 

:

production { 
    grails.plugins.springsecurity.cas.loginUri = '/login' 
    grails.plugins.springsecurity.cas.serviceUrl = 'https://example.com/grailsapp/j_spring_cas_security_check' 
    grails.plugins.springsecurity.cas.serverUrlPrefix = 'https://casserver.com/cas' 
    grails.plugins.springsecurity.logout.afterLogoutUrl = 'https://casserver.com/cas/logout?url=https://example.com/grailsapp/' 
} 

답변

0

F5 리디렉션 다시 쓰기 규칙을 통해 해결책을 찾을 수있었습니다. 불행히도 Grails 솔루션을 개발하는 것만 큼 이상하지는 않지만 제 환경에서는 잘 작동합니다.

when HTTP_RESPONSE { 
    if { [HTTP::is_redirect] }{ 
     HTTP::header replace Location [string map {"http://example.com/grailsapp/" "https://example.com/grailsapp/"} [HTTP::header Location]] 
    } 
} 
3

난 당신이 봄 보안에 대한 채널 보안 설정을보고 추천 할 것입니다. documentation에있는 F5 및 SSL 관련 섹션에주의하십시오. 설정하여

grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true 

나는 또한 당신이 항상 SSL에서 실행되도록 응용 프로그램을 강제하지 않는 의심 :

나는 당신이 구성에서 다음을 누락 의심

grails.plugin.springsecurity.secureChannel.definition = [ 
    '/**': 'REQUIRES_SECURE_CHANNEL' 
] 
+0

이전에는이 ​​구성에 별다른 행운이 없었으며, Weblogic이기 때문에 헤더를 'WL-Proxy-SSL'로 변경했습니다. Grails 레벨에서 프로토콜을 사용하여 아무 것도하지 않아도됩니다. 로드 밸런서가 내 SSL 연결을 보장하기 때문에.비록 내가 grails 어플리케이션에서 모든 것을 HTTP처럼 실행했다 할지라도, 모든 것이 상대적인 것이므로 중요하지 않아야하지만, 그것은 일어나지 않는 것 같습니다. – legomania

+0

grails.plugin.springsecurity.secureChannel.definition = [ '/ **': 'REQUIRES_SECURE_CHANNEL' ]가 완벽하게 작동했습니다. – Neoecos

1

당신은 할 수 있습니다 고려 대상 http://grails.org/plugin/force-ssl

그렇지 않으면 Apache/Nginx를 사용하여 리디렉션을 수행하는 것이 좋습니다

+0

흠, 나는 force-ssl이 내가 원하는 것을하지 않을 것이라고 생각합니다. 문제는 .. 현재의 유스 케이스에서 http 호출이 일어날 수 없다는 것입니다. 내 응용 프로그램이 iFrame을 통해 포털에 표시되고 있으며 포털은 https를 사용하고 있습니다. 불행히도 Chrome은 HTTP 요청을 보내는 https 세션 내에서 코드를 차단합니다. 그래서 하나의 http 호출은 매우 나쁜 사용자 경험을 초래합니다. Apache를 사용하고 싶지만 인프라 때문에 Weblogic이 붙어 있습니다. – legomania

관련 문제