Spring Boot和Keycloack

时间:2017-12-20 20:47:55

标签: java spring-boot spring-security redhat keycloak

我想帮助我的春季启动应用程序更安全。

我目前有一个RESTful API,没有实现安全性。 另一个Spring启动应用程序通过HTTP请求(GET,POST,PUT ...)访问此API。

最近,我浏览了REDHAT教程,演示了如何使用keycloak制作更安全的spring boot应用程序。

我想学习如何将这个安全组合(springsecurity-keycloak)用于具有桌面应用程序(也在java中)作为其客户端的springboot应用程序。任何建议都会派上用场。

谢谢你, 塞尔索

1 个答案:

答案 0 :(得分:0)

这里有2个选项:

1)使用Keycloak Adapter进行Spring启动。

2)或者只使用带有Keycloak的Springs OAuth2包(因为Keycloak只是另一个OAuth2服务器)。以下是使用Keycloak传递的JWT(基于共享密钥)的示例配置:

@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class JwtSecurityConfig extends ResourceServerConfigurerAdapter{

    @Override
    public void configure(ResourceServerSecurityConfigurer config) {
        config.tokenServices( createTokenServices() );
        config.resourceId(the aud claim that you setup under Keycloak/realm/mappers);
    }

    @Bean
    public DefaultTokenServices createTokenServices() {
        DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
        defaultTokenServices.setTokenStore( createTokenStore() );
        return defaultTokenServices;
    }

    private TokenStore createTokenStore(){
        return createJwtTokenStore();
    }

    @Bean
    public TokenStore createJwtTokenStore() {               
        return new JwtTokenStore( createJwtAccessTokenConverter() );
    }

    @Bean
    public JwtAccessTokenConverter createJwtAccessTokenConverter() {
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setSigningKey(shared secret that is configured in keycloak client);
        return converter;
    }
}