簡體   English   中英

Vaadin 8(沒有 Spring 引導/安全)和 Keycloak 不工作

[英]Vaadin 8 (withouth Spring Boot/Security) and Keycloak not working

我有一個使用 Vaadin 8 構建的“舊版”應用程序,我需要使用 Keycloak 來保護它。 不幸的是,甚至沒有觸發到 Keycloak 的重定向。

作為測試,我創建了一個 Spring 引導應用程序並嘗試使用 Keycloak 保護它而沒有任何問題,但它無法與 Vaadin 8 一起使用。

我的 Spring 引導應用程序的配置文件是;

應用程序屬性

keycloak.realm=myrealm
keycloak.resource=test-app
keycloak.auth-server-url=http://localhost:8080/auth
keycloak.ssl-required=external
keycloak.public-client=true

keycloak.securityConstraints[0].authRoles[0]=Patient
keycloak.securityConstraints[0].authRoles[1]=Admin
keycloak.securityConstraints[0].securityCollections[0].name=boeken
keycloak.securityConstraints[0].securityCollections[0].patterns[0]=/books

keycloak.securityConstraints[1].authRoles[0]=Admin
keycloak.securityConstraints[1].securityCollections[0].name=backend
keycloak.securityConstraints[1].securityCollections[0].patterns[0]=/manager

server.port=8090

KeycloakConfig class

@Configuration
public class KeycloakConfig {

    @Bean
    public KeycloakSpringBootConfigResolver keycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }
}

只需添加此內容,就會觸發 Keycoal 重定向,我可以登錄。簡單。

當我嘗試保護 Vaadin 8 應用程序時,我應該更改/添加什么? 它不是 Spring/Spring 啟動應用程序(不是由 SpringApplication.run() 啟動的),我不認為必須擁有一個 Spring/Spring 啟動應用程序才能使用 Keycloak 保護它(如果我錯了,請糾正我)。 問題似乎是 application.properties 文件被忽略(盡管它位於 class 路徑上),因為我可以導航到應該保護的 url。

有誰看到缺少/錯誤的東西?

如果您考慮使用 Spring 引導,我創建了 Vaadin 8、Spring Boot 和 Keycloak 之間集成的工作示例

它利用vaadin-spring-bootkeycloak-spring-boot-adapterkeycloak-spring-security-adapter插件快速啟動,您的application.properties將被正確獲取。 本質上,這個設置告訴 Vaadin 讓 Spring Security 處理所有安全性,然后 Keycloak 被連接為安全處理程序。

唯一需要的配置是自定義SecurityConfiguration來定義您的特定安全需求。

但大部分歸結為:

@Configuration
@EnableWebSecurity
@EnableVaadinSharedSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true)
public class SecurityConfiguration extends KeycloakWebSecurityConfigurerAdapter {
...
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.httpBasic().disable();
    http.formLogin().disable();
    // disable spring security csrf as Vaadin already provides this
    // also possible to disable this in Vaadin and leave this enabled
    http.csrf().disable();
    http
        .authorizeRequests()
        .antMatchers("/vaadinServlet/UIDL/**").permitAll()
        .antMatchers("/vaadinServlet/HEARTBEAT/**").permitAll()
        .anyRequest().authenticated();
    http
        .logout()
        .addLogoutHandler(keycloakLogoutHandler())
        .logoutUrl("/sso/logout").permitAll()
        .logoutSuccessUrl("/");
    http
        .addFilterBefore(keycloakPreAuthActionsFilter(), LogoutFilter.class)
        .addFilterBefore(keycloakAuthenticationProcessingFilter(), BasicAuthenticationFilter.class);
    http
        .exceptionHandling()
        .authenticationEntryPoint(authenticationEntryPoint());
    http
        .sessionManagement()
        .sessionAuthenticationStrategy(sessionAuthenticationStrategy());
  }
...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM