2017-08-08 4 views
0

Donc, j'utilise keycloak pour sécuriser mes services. L'application client obtient le jeton d'accès du serveur keycloak et l'utilise pour sécuriser l'accès à l'application de démarrage Spring. J'ai configuré ma demande de démarrage Spring propriétés keycloak en utilisant le type d'accès porteur uniquement:Sécurisation du service Spring Boot avec keycloak - jeton JWT

keycloak.realm = master 
keycloak.realmKey = ... 
keycloak.auth-server-url = http://localhost:8080/auth 
keycloak.ssl-required = external 
keycloak.resource = boot-app 
keycloak.bearer-only = true 
keycloak.cors = true 

botte printemps démarreur keycloak:

<dependency> 
    <groupId>org.keycloak</groupId> 
    <artifactId>keycloak-spring-boot-starter</artifactId> 
</dependency> 

et confiGuration KeycloakWebSecurityConfigurerAdapter:

@Configuration 
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class) 
public class KeycloakSecurityConfig extends KeycloakWebSecurityConfigurerAdapter 
{ 
    /** 
    * Registers the KeycloakAuthenticationProvider with the authentication manager. 
    */ 
    @Autowired 
    public void configureGlobal(final AuthenticationManagerBuilder auth) throws Exception 
    { 
    final KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider(); 
    keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper()); 
    auth.authenticationProvider(keycloakAuthenticationProvider); 
    } 

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

    /** 
    * Defines the session authentication strategy. 
    */ 
    @Bean 
    @Override 
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() 
    { 
    return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl()); 
    } 

    @Override 
    protected void configure(final HttpSecurity http) throws Exception 
    { 
    super.configure(http); 
    http 
     .authorizeRequests() 
     .antMatchers(
      "/v2/api-docs", 
      "/configuration/ui", 
      "/swagger-resources", 
      "/configuration/security", 
      "/swagger-ui.html", 
      "/webjars/**", 
      "/swagger-resources/configuration/ui", 
      "/swagge‌​r-ui.html", 
      "/swagger-resources/configuration/security").permitAll() 
     .antMatchers("/*").hasRole("user") 
     .anyRequest().authenticated(); 
    } 
} 

Maintenant, Tout fonctionne bien. Ma question est: jeton Bearer est jeton JWT, tout ce que vous avez besoin de le décoder (et vérifier l'accès) est la clé publique, qui est

keycloak.realmKey 

Pourquoi auriez-vous besoin d'autres paramètres, specifiquement:

keycloak.auth-server-url 

La clé publique n'est-elle pas tout ce dont vous avez besoin?

Merci à l'avance

Répondre

2

En effet pour un bearer-only vous pourriez se demander pourquoi l'URL KC est nécessaire, mais depuis quelques versions KC realmKey ne sont plus obligatoires car nous avons l'habitude rotation de la clé. Cela signifie que votre application récupérera dynamiquement la clé publique du serveur KC à l'aide de la propriété auth-server-url.

+0

Merci pour l'explication. Savez-vous où je pourrais trouver toute la documentation à ce sujet? Ou peut-être à propos de l'intégration avec Spring Boot. I Les docs sur le site officiel de keycloak sont assez minimes. – nejckorasa

+0

Avez-vous vérifié la documentation "generic java" sur les adaptateurs OIDC https://keycloak.gitbooks.io/documentation/securing_apps/topics/oidc/java/java-adapter-config.html? A propos de Spring Boot qu'est-ce qui te manque? Peut-être que mon blog peut aider https://developers.redhat.com/blog/2017/05/25/easily-secure-your-spring-boot-applications-with-keycloak/? –

+0

Je ne sais pas comment je n'ai pas vu ça ... Merci pour les liens! – nejckorasa