Как конфигурировать OAuth 2.0 в Spring Security и какой пакет за что отвечает?

Я изучаю Spring Security и в частности дошёл до OAuth 2.0. У меня полное не понимание и запутанность относительно того, как вообще это конфигурировать и использовать - я имею ввиду пакеты spring-security-oauth2-resource-server, spring-security-oauth2-authorization-server и spring-security-oauth2-client.

Будет очень многословно пытаться приводить конкретные примеры чего я не понимаю, поэтому просто сформулирую четыре вопроса:

  1. В чём отличие перечисленных модулей и когда какой использовать?

  2. Допустим, есть задача: нужно написать сервер, где будет возможность регистрации и авторизации, а затем выдача собственного JWT-токена с помощью которого можно пользоваться REST API через заголовок Authorization и по своей сути решается она плюс минус так в самом простом варианте (сами методы контроллера, создание JWT и его подпись с помощью RSA ключей тут опущена, т.к. выйдет слишком много не нужного кода):

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http, Converter<Jwt, UsernamePasswordAuthenticationToken> converter) throws Exception {
        http
                .authorizeHttpRequests(authorize ->
                        authorize
                                .requestMatchers(
                                        "/api/" + apiVersion + "/auth/register",
                                        "/api/" + apiVersion + "/auth/login"
                                )
                                .permitAll()
                                .anyRequest()
                                .authenticated()
                )
                .csrf(AbstractHttpConfigurer::disable)
                .cors(AbstractHttpConfigurer::disable)
                .httpBasic(AbstractHttpConfigurer::disable)
                .oauth2ResourceServer(configurer ->
                        configurer.
                                jwt((jwt) -> jwt.jwtAuthenticationConverter(converter))
                )
                .sessionManagement(configurer ->
                        configurer
                                .sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .exceptionHandling(configurer ->
                        configurer
                                .authenticationEntryPoint(new BearerTokenAuthenticationEntryPoint())
                                .accessDeniedHandler(new BearerTokenAccessDeniedHandler())
                );
        return http.build();
    }
    

    , т.е. мы просто создали сервер ресурсов и благодаря нему у нас появился BearerTokenAuthenticationFilter в цепочке фильтров, который теперь будет преобразовывать и проверять наш токен. Но вот приходит задача: заказчик хочет добавить возможность выпускать и использовать в нашем приложении вход через GitHub и Google, а в дальнейшем и Apple, но при этом сохранить функциональность входа с помощью собственного JWT токена. Как в таком случае конфигурировать OAuth 2.0?

  3. Следующий вопрос касается внедрения каких-либо менее известных систем. Допустим, ЮКасса. Она имеет соотвествующий стандартам механизм входа через OAuth с помощью authorization_code. Как её добавить в конфигурацию? Кстати говоря, что касается ЮКассы, то здесь токен нужен для взаимодействия с их API в будущем, а не для авторизации приложения, поэтому входить в приложения с помощью этого токена нельзя - его нужно просто перехватить и сохранить в базу данных.

  4. Ну и последний вопрос, а хотя вернее даже уточнение: меня интересует система без сохранения состояния, т.е. SessionCreationPolicy.STATELESS


Ответы (0 шт):