Spring Oauth2 Несколько аутентификаций - PullRequest
0 голосов
/ 04 апреля 2019

Я довольно новичок в проекте oauth-spring и пытаюсь создать безопасный интерфейс Rest под

/ апи / юридическое лицо

существует множество сущностей, и область действия API на данный момент внутренняя, я использую

                @Configuration
static class Oauth2Config extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private UserDetailsServiceImpl userDetailsService;

    @Override
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
        oauthServer.checkTokenAccess("permitAll()");
        oauthServer.allowFormAuthenticationForClients();
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.springframework.security.oauth2.config.annotation.web.configuration.
     * AuthorizationServerConfigurerAdapter#configure(org.springframework.security.
     * oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer)
     */
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        // @formatter:off
        clients.inMemory()
            .withClient("domain")
            .secret("secret")//.accessTokenValiditySeconds(expiration)
            .scopes("read", "write", "read_all", "modify", "delete")
            .authorizedGrantTypes("password", "refresh_token")
            .resourceIds("api");

        // @formatter:on
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.springframework.security.oauth2.config.annotation.web.configuration.
     * AuthorizationServerConfigurerAdapter#configure(org.springframework.security.
     * oauth2.config.annotation.web.configurers.
     * AuthorizationServerEndpointsConfigurer)
     */
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer configurer) throws Exception {
        configurer.authenticationManager(authenticationManager);
        configurer.userDetailsService(userDetailsService);
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }



}

и на моем сервере ресурсов у меня есть;

@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
    resources.resourceId("api");
}

и работает нормально, моя следующая задача - это интеграция (и), которые планируются под

/ апи / объект / синхронизации

Я хочу, чтобы на этот раз пользователи перенаправлялись на страницу внешнего входа в систему oauth и при аутентификации / токене процесса / синхронизации. Почти весь день, проведенный с весенними документами, не смог понять, как этого добиться.

Моя первая интеграция с провайдером, который, когда пользователь нажимает Разрешения> Разрешить, перезванивает с

  • Знак
  • начальная синхронизация полезной нагрузки

Я не знаю, как настроить следующие

private static final RequestMatcher API_URLS = new OrRequestMatcher(new AntPathRequestMatcher("/api/**"));

private static final RequestMatcher EXTERNAL_API_URLS = new OrRequestMatcher(new AntPathRequestMatcher("/api/**/sync"));

@Override
public void configure(HttpSecurity http) throws Exception {
    // @formatter:off
    http
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .authorizeRequests()
            .requestMatchers(API_URLS)
            .access("#oauth2.hasScope('read')");     // require 'read' scope to access



    // @formatter:on
}

, чтобы иметь возможность разрешить oauth2Login и пользовательские

.oauth2Login()
     .tokenEndpoint()
     .accessTokenResponseClient(accessTokenResponseClient())
     .and()
     .userInfoEndpoint().userService(new ExternalUserDetailsService());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...