Azure App Service(https만 해당)를 사용하여 싱글 사인온을 위해 oauth2를 사용하는 스프링 부트 애플리케이션에서 생성된 war 파일을 배포했습니다.
홈 페이지를 탐색할 때 홈 페이지가 로그인 버튼과 함께 로드됩니다. 로그인 버튼을 클릭하면 "http://..../login"으로 리디렉션됩니다(/login은 기본 sso 로그인 경로입니다). 내 앱 서비스가 https 전용이므로 http URL이 작동하지 않습니다.
application.property 파일에서 redirect_uri 설정을 시도했지만 도움이 되지 않습니다. 아무도이 문제에 직면 했습니까? 어떻게 해결할 수 있습니까?
여기에 언급된 유사한 문제를 찾았습니다 .
이 문제는 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();
공식 정보를 보려면 이 페이지 를 방문하십시오 .