카테고리 없음

"https://...../login" 대신 "http://...../login"으로 스프링 리디렉션이 발생함 물어보다

기록만이살길 2022. 10. 29. 14:54
반응형

"https://...../login" 대신 "http://...../login"으로 스프링 리디렉션이 발생함 물어보다

1. 질문(문제점):

Azure App Service(https만 해당)를 사용하여 싱글 사인온을 위해 oauth2를 사용하는 스프링 부트 애플리케이션에서 생성된 war 파일을 배포했습니다.

홈 페이지를 탐색할 때 홈 페이지가 로그인 버튼과 함께 로드됩니다. 로그인 버튼을 클릭하면 "http://..../login"으로 리디렉션됩니다(/login은 기본 sso 로그인 경로입니다). 내 앱 서비스가 https 전용이므로 http URL이 작동하지 않습니다.

application.property 파일에서 redirect_uri 설정을 시도했지만 도움이 되지 않습니다. 아무도이 문제에 직면 했습니까? 어떻게 해결할 수 있습니까?

여기에 언급된 유사한 문제를 찾았습니다 .

2. 해결방안:

이 문제는 Tomcat 서버가 프록시 뒤에 있을 때 발생합니다. HTTPS 요청은 프록시에서 종료되고 프록시는 HTTP 프로토콜을 사용하여 Tomcat 서버와 통신합니다. Azure(App Service) 등과 같은 클라우드 공급자에 코드를 배포하는 경우 이 문제에 직면하게 됩니다.

이 문제에 직면한 사람을 위한 해결책은 다음과 같습니다.

application.properties 파일에 다음을 추가합니다. 참고: 일부 속성은 Spring Boot 2.* 버전에서 다른 이름을 갖습니다.

security.oauth2.client.pre-established-redirect-uri=https://yourappurl.net/login
security.oauth2.client.registered-redirect-uri=https://yourappurl.net/login
security.oauth2.client.use-current-uri=false
server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.protocol-header=x-forwarded-proto
server.tomcat.use-relative-redirects=true
server.use-forward-headers=true
server.tomcat.internal-proxies=.*

SpringBootApplication 클래스에서 다음 빈을 추가하십시오. Spring Boot <= 2.1.x에서는 ForwardedHeaderFilter-Bean을 제공해야 했습니다. Spring Boot 2.2.0 이후로 더 이상 이것을 할 필요가 없습니다.

import org.springframework.core.Ordered;
import org.springframework.web.filter.ForwardedHeaderFilter;
@Bean
FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() {
    final FilterRegistrationBean<ForwardedHeaderFilter> filterRegistrationBean = new FilterRegistrationBean<ForwardedHeaderFilter>();
    filterRegistrationBean.setFilter(new ForwardedHeaderFilter());
    filterRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
    return filterRegistrationBean;
}

AppConfiguration 클래스의 configure 메서드에 다음 줄을 추가합니다.

http.requiresChannel().anyRequest().requiresSecure();

공식 정보를 보려면 이 페이지 를 방문하십시오 .

64403718
반응형