Безопасность Spring - защита одних конечных точек отдыха с помощью OKTA, а других - с помощью Active Directory в том же API - PullRequest
0 голосов
/ 04 августа 2020
• 1000 Мне удалось сделать это по отдельности (я могу защитить конечные точки с помощью OKTA или AAD), но они не хотят работать вместе. Как только я добавляю okta-spring-boot-starter в POM (или okta-spring-security-oauth2) - безопасность AAD перестает работать, и конечные точки либо открываются, либо защищены только с помощью OKTA. Я пытаюсь сделать это с помощью реализаций WebSecurityConfigurerAdapter для okta и aad:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {


    @Configuration
    @Order(1)
    public static class OktaAdapter extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
                    .antMatchers("/v1/endpoint1").authenticated()
                    .antMatchers("/v1/endpoint2/**").authenticated();

        }
    }

    @Configuration
    @Order(2)
    public static class ActiveDirectoryAdapter extends WebSecurityConfigurerAdapter {
        @Autowired
        private AADAppRoleStatelessAuthenticationFilter filter;

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().disable()
                    .authorizeRequests()
                    .antMatchers("/v1/endpoint3/**").authenticated()
                    .antMatchers("/v1/endpoint4/**").authenticated()
                    .and()
                    .addFilterBefore(filter, UsernamePasswordAuthenticationFilter.class);
        }
    }
}

Однако эта конфигурация работает только для конечной точки1 и конечной точки2 (защищенной с помощью okta), другие точки отдыха открыты (как если бы вторая реализация WebSecurityConfigurerAdapter было проигнорировано). Если я удалю пакет okta из pom, конфигурация AAD начнет работать. Если я поменяю порядок вышеупомянутых конфигураций, то ничего не будет защищено. Я подозреваю, что пакет okta выполняет некоторую автоконфигурацию, но не может найти никакой информации о нем. Что мне не хватает?

1 Ответ

0 голосов
/ 04 августа 2020

Okta Spring Boot Starter - это в основном просто легкая оболочка, помогающая настроить существующую автоконфигурацию Spring Security OAuth с несколькими c битами, специфичными для Okta.

Мое первое предложение (если возможно) - это попытаться использовать Spring Security OAuth для обоих IdP, поскольку не похоже, что стартер AAD работает со встроенной поддержкой OAuth Spring Security (я мог ошибаться, я только бегло посмотрел). Предполагая, что AAD - это просто OAuth / OID C, он просто будет работать с небольшой конфигурацией.

Вам все равно понадобится решение для защиты данных маршрутов 1 и 2 -> Okta 3 и 4 AAD. Есть несколько способов сделать это. Вы можете использовать области (при условии, что они разные) или какой-либо другой тип «полномочий»:

http.authorizeRequests()
        .antMatchers("/your/route").hasAuthority("SCOPE_custom");

Okta Spring Boot Starter должен работать с другими IdP, настроенными со свойствами Spring Security OAuth: https://docs.spring.io/spring-security/site/docs/current/reference/html5/#oauth2login -boot-property-mappings

Я не могу сказать на 100% то, что добавляет стартер ADD, но я предполагаю, что это похоже на Okta. Это:

  • Общий набор свойств (встроенный с предложениями других поставщиков)
  • Указанный поставщиком c Проверка JWT (Spring Security выполняет только базовую c проверку JWT, и у каждого поставщика есть свои рекомендации, предполагая, что вы используете токены доступа JWT)
  • Немного сахара (например, стартер Okta добавляет отображение групп Okta в Spring Authorities)

Что касается проверки JWT, Okta рекомендует проверять JWT следующим образом: https://scotch.io/tutorials/jwt-vs-opaque-access-tokens-use-both-with-spring-boot#toc -better-jwt-validation

Можно использовать аналогичный метод (при необходимости).

Держите нас в курсе!

...