2017-04-27 16 views
2

저는 스프링 부트로 놀았으며 Keycloak과 Vaadin을 다른 프로젝트에서 사용하는 데 성공했습니다. 이제 Vaadin을 사용하여 자체 보안을 구현하지 않아도되도록 두 가지를 결합하려고했습니다. 지금까지 내가 가진 결과는 여기에서 찾을 수 있습니다 : github project.Spring Boot, Keycloak 및 Vaadin 통합 문제

나는 shared security example에 의해 vaadin4spring에서 시작했다. 그런 다음 keycloak-spring-security-adapterkeycloak-spring-boot-adapter에 지정된 Keycloak 구성을 추가했습니다.

나는 둘 다 함께 일하기에 벽을 때렸다. 모든 및 실행하고 나는 다음과 같은 오류 얻을 localhost:8080로 이동하면 :

{"timestamp":...,"status":401,"error":"Unauthorized","message":"Unauthorized","path":"/"}

없음 리디렉션이 Keycloak 인증을 트리거되지됩니다. 그러나 Vaadin에서 관리하지 않는 다른 URL로 이동하면 (예 : localhost:8080/login, 리디렉션이 트리거됩니다.

성공적으로 로그인 한 후 오류없이 localhost:8080으로 이동할 수 있습니다. 그러나 모든 작업은 제한된 상태로 유지되며 보안보기는 숨겨진 상태로 유지됩니다.

내 구성을 수정하는 방법에 대한 아이디어가 있으십니까? 나는 CORS 취급 Vaadin 때문이라고 생각하고 있습니다.

답변

1

내 설치 프로그램에서 시스템이 실제로 인증을 시도하는 대신 사용자를 익명으로 등록합니다.

http.anonymous().disable(); 

보안 구성에 위의 스 니펫을 추가하면 발생하지 않으며 시스템이 사용자를 KC 로그인으로 올바르게 리디렉션합니다.

일단 내가이 작업을하게되면, 나는 또한 나의 견해가 망가 졌음을 발견했다. 이는 메소드 보안 프록시 설정이 모든 bean에 영향을주기 때문입니다. Vaadin은 예를 들어, 프록시 대신 실제 런타임 클래스를 요구합니다. 보기를 찾는다. trueproxyTargetClass 변경

@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true) 

는 서브 클래스의 프록시 만약 angel와 충돌을 피하는 생성됩니다 보장합니다.

모든 변경 사항을 github 프로젝트에 푸시했습니다.

+0

익명으로 액세스 할 수있는보기 (예 : 사용자 등록 양식)가있는 프로젝트의 경우이 방법을 조정할 수 있습니다. 친절한 점 ;-) –

+0

네가 원한다면 네. 기본적으로 응용 프로그램에 액세스하려면 사용자가 등록되어 있어야합니다. 기본적으로 모든 액세스를 허용 한 다음보기 및 메소드에 대해보다 세부적인 액세스 제어를 수행하도록 변경할 수 있습니다. – chvndb

2

UI 서비스의 루트 경로 ("/")를 보호 할 때 Keycloak 스프링 보안 어댑터를 사용하고 몇 가지 문제가있었습니다.

나는 사용자가 UI의 루트 경로에 액세스하려고 시도 할 때 리디렉션을 보내 스프링 MVC를 구성 결국 :

@Bean 
public WebMvcConfigurerAdapter forwardToEquipmentManager() { 
    return new WebMvcConfigurerAdapter() { 
     @Override 
     public void addViewControllers(ViewControllerRegistry registry) { 
      registry.addViewController("/").setViewName("redirect:/ui/home"); 
     } 
    }; 
} 

루트 경로를 요청하면 브라우저가 홈 경로로 리디렉션이 방법과 어댑터 논리를 시작합니다. 그냥 작동합니다.

+1

'설정자', 그런 지독한 이름. – petey

+0

입력 해 주셔서 감사합니다. 올바른 방향으로 나를 잡았습니다. 이제 인증이 제대로 작동합니다. 내 대답을 참조하십시오. – chvndb