Как сопоставить полномочия в клиенте OAuth2 с весенней загрузкой?

Я создаю стандартную весеннюю загрузку mvc + тимелеаф + Oauth2. До сих пор я добавил библиотеку oauth2-client для аутентификации, но теперь мне нужна авторизация для защиты моего приложения.

Означает ли это, что мне также нужно настроить его как сервер ресурсов?

Если нет, как я могу сопоставить полномочия из частного утверждения (в токене идентификатора), в которые мой сервер авторизации помещает роли?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Конфигурация сервера ресурсов адаптирована для защиты ресурсов REST.

Конфигурация клиента работает нормально, если вы не предоставляете свой API. Если это так, добавьте вторую цепочку фильтров безопасности. Подробности в этом другом ответе: Используйте адаптер Keycloak Spring с Spring Boot 3

Сопоставление органов власти в клиенте OAuth2

Как упоминалось в моем комментарии, Документация по безопасности Spring всегда лучше, чем то, что можно было бы написать на Stackoverflow (но, конечно, члены команды Spring-безопасности, которые публикуют ответы)

Дважды проверьте утверждение, в которое ваш сервер авторизации помещает роли пользователей, и предоставьте сопоставитель полномочий:

  • явно с http.oauth2Login().userInfoEndpoint().userAuthoritiesMapper(userAuthoritiesMapper());
  • как @Bean типа GrantedAuthoritiesMapper, который должен автоматически настраиваться spring-boot

В обоих случаях код для сопоставителя одинаков (дважды проверьте имя заявки на роли пользователей на своем сервере авторизации, но это может быть groups с Azure AD):

@Bean
GrantedAuthoritiesMapper userAuthoritiesMapper() {
    return (authorities) -> {
        Set<GrantedAuthority> mappedAuthorities = new HashSet<>();

        authorities.forEach(authority -> {
            if (authority instanceof OidcUserAuthority oidcAuth) {
                oidcAuth.getIdToken().getClaimAsStringList("groups").forEach(a -> mappedAuthorities.add(new SimpleGrantedAuthority(a)));

            } else if (authority instanceof OAuth2UserAuthority oauth2Auth) {
                ((List<String>) oauth2Auth.getAttributes().getOrDefault("groups", List.of())).forEach(a -> mappedAuthorities.add(new SimpleGrantedAuthority(a)));

            }
        });

        return mappedAuthorities;
    };
}

Итак, я должен иметь возможность проверить авторизацию только с помощью моего идентификатора, верно?

user2566397 13.02.2023 21:41

где я могу установить имя поля претензии для поиска ролей?

user2566397 13.02.2023 21:50

Лучше спросить Бога, чем его учеников: docs.spring.io/spring-security/reference/reactive/oauth2/log‌​in/…

ch4mp 14.02.2023 02:06

Я отредактировал ваш вопрос, чтобы, я полагаю, у других людей с такими же потребностями было больше шансов открыть тему. Надеюсь, ты не против.

ch4mp 14.02.2023 03:57

Я получаю 403 при защите всех запросов, есть идеи? http.authorizeHttpRequests((authorize) -> authorize .anyRequest().hasRole("admin"));

user2566397 14.02.2023 04:25

возможно, у вас есть именно admin в вашем токене доступа => либо добавьте префикс ROLE_ в маппере, либо используйте hasAuthority("admin") вместо hasRole("admin") (для Spring роль — это не что иное, как полномочия, начинающиеся с ROLE_)

ch4mp 14.02.2023 05:17

все настроено, но все еще не работает, я заметил, что при использовании SecurityFilterChain GrantedAuthoritiesMapper не вызывается

user2566397 14.02.2023 13:46

GrantedAuthoritiesMapper с аннотацией @Bean не работал, но если я установил это в oauth2Login, он работает

user2566397 14.02.2023 14:33

Другие вопросы по теме