Весенний брелок только на предъявителя - PullRequest
0 голосов
/ 27 июня 2018

Я занимаюсь разработкой углового веб-приложения, которое связано с бэкэндом Java (Spring Framework). Аутентификация осуществляется через сервер Keycloak.

На моем локальном компьютере со встроенным сервером Tomcat приложение angular и приложение spring работают без ошибок.

Для развертывания мне нужно использовать старомодный способ с использованием существующего сервера Tomcat.

Угловой интерфейс доступен в каталоге ROOT через http://myurl/ Пружинный бэкэнд помещается как файл военных действий и доступен через http://myurl/api/

На сервере все работает, кроме части аутентификации. Angular приложение может войти через перенаправление и т. Д. И получает токен доступа. Этот токен передается по запросу в бэкэнд пружины. Но серверная часть возвращает неавторизованное сообщение.

Любая помощь сокращается!

Сообщение:

Невозможно аутентифицироваться с помощью заголовка авторизации

Я создал класс SecurityConfig:

@Configuration
@EnableWebSecurity
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(
            AuthenticationManagerBuilder auth) throws Exception {

        KeycloakAuthenticationProvider keycloakAuthenticationProvider
                = keycloakAuthenticationProvider();
        keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(
                new SimpleAuthorityMapper());
        auth.authenticationProvider(keycloakAuthenticationProvider);
    }

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

    @Bean
    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new RegisterSessionAuthenticationStrategy(
                new SessionRegistryImpl());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.authorizeRequests()
                .antMatchers("/*")
                .authenticated()
                .anyRequest()
                .permitAll();
    }
}

Добавлена ​​эта строка в свойства приложения

keycloak 
keycloak.auth-server-url=https://authserver.net/auth
keycloak.realm=myRealm keycloak.bearer-only=true 
keycloak.resource=myclient 
keycloak.cors=true

И добавил это зависимости

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>1.5.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.keycloak.bom</groupId>
                <artifactId>keycloak-adapter-bom</artifactId>
                <version>3.3.0.Final</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

1 Ответ

0 голосов
/ 02 июля 2018

Отключение токена csrf решило эту проблему.

Пример:

@Override
protected void configure(HttpSecurity http) throws Exception {
      super.configure(http);
      http.authorizeRequests()
      http
          .csrf()
          .disable()
          .authorizeRequests()
          .antMatchers("/*")
          .authenticated()
          .anyRequest() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...