спрингбут с брелоком - PullRequest
       6

спрингбут с брелоком

0 голосов
/ 18 октября 2018

Я пытаюсь использовать весеннюю загрузку с keycloak, поэтому я создаю 2 клиента в keycloak

1 - "central-front" является общедоступным, где мой пользователь получает токен 2 - "central-api" is "только на предъявителя ", где мой API будет проверять токен

в моем" Centra-API ", я создаю 2 роли CLIENTE и CARTORIO, затем я создаю одного пользователя с ролью CLIENTE, а другого - с CARTORIO.

в моей спине я настраиваю так:

package br.com.lumera.centralback.config;

import org.keycloak.adapters.KeycloakConfigResolver;
import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider;
import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
import org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticatedActionsFilter;
import org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter;
import org.keycloak.adapters.springsecurity.filter.KeycloakPreAuthActionsFilter;
import org.keycloak.adapters.springsecurity.filter.KeycloakSecurityContextRequestFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
import org.springframework.security.web.authentication.session.NullAuthenticatedSessionStrategy;
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;

@Configuration
@EnableWebSecurity
public class KeycloakSecurityConfigurer extends KeycloakWebSecurityConfigurerAdapter {

    @Bean
    public GrantedAuthoritiesMapper grantedAuthoritiesMapper() {
        //o Springboot espera que toda role comeca com "ROLE_" essa configuracao coloca o ROLE_ nas roles que estao cehgando
        SimpleAuthorityMapper mapper = new SimpleAuthorityMapper();
        mapper.setConvertToUpperCase(true);
        return mapper;
    }

    @Override
    protected KeycloakAuthenticationProvider keycloakAuthenticationProvider() {
        final KeycloakAuthenticationProvider provider = super.keycloakAuthenticationProvider();
        provider.setGrantedAuthoritiesMapper(grantedAuthoritiesMapper());
        return provider;
    }

    @Override
    protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(keycloakAuthenticationProvider());
    }

    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new NullAuthenticatedSessionStrategy();
    }

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        super.configure(http);
        http
          .authorizeRequests()
                .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
                .antMatchers("/estado/*").hasRole("CLIENTE")
                .antMatchers("/natureza/*").hasRole("CLIENTE")
                .antMatchers("/cartorio/*").hasRole("CLIENTE")
                .antMatchers("/mensagem/*").hasRole("CLIENTE")
                .anyRequest().permitAll();
    }

    @Bean
    public FilterRegistrationBean keycloakAuthenticationProcessingFilterRegistrationBean(
            final KeycloakAuthenticationProcessingFilter filter) {
        final FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
        registrationBean.setEnabled(false);
        return registrationBean;
    }

    @Bean
    public FilterRegistrationBean keycloakPreAuthActionsFilterRegistrationBean(
            final KeycloakPreAuthActionsFilter filter) {
        final FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
        registrationBean.setEnabled(false);
        return registrationBean;
    }

}

и мой keycloak.json

{
  "realm" :  "Lumera",
  "bearer-only" :  true,
  "auth-server-url" :  "http://localhost:9090/auth",
  "ssl-required" :  "external",
  "resource" :  "central-api",
  "use-resource-role-mappings" :  true,
  "principal-attribute" :  "preferred_username"
}

Так что, когда я пытаюсь получить доступ к GET URI, роли работают нормально, если я регистрируюКАРТОРИО Я не могу получить доступ ни к одному из указанных выше URL, и если я регистрирую КЛИЕНТА, я получаю доступ в обычном режиме.но в моем url / mensagem / у меня есть один POST в / mensagem /, и когда я пытаюсь POST что-то, я всегда получаю Ant Forbidden, я уже пытаюсь поставить

.antMatchers(HttpMethod.POST, "/mensagem/**")

Я уже пытаюсь удалить

.antMatchers("/mensagem/*").hasRole("CLIENTE")

без успеха тоже

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...