Okta oauth2 интеграция с весенней загрузкой - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь аутентифицировать все запросы, поступающие на мои остальные конечные точки, особенно запросы POST.Я интегрировал okta ouath2 с моим приложением весенней загрузки.Согласно моей реализации WebSecurityConfigurerAdapter, я аутентифицирую все запросы к конечной точке / login, но я специально не блокирую свои конечные точки REST.Честно говоря, я не уверен, что происходит под капотом.Я использую аннотацию @ EnableOAuth2Sso.

Если я блокирую свои конечные точки REST из конфигурации безопасности, я всегда получаю запрещенный код состояния (403) для своих вызовов.Поэтому я решил аутентифицировать только вызовы к конечной точке / login, а не ко всем конкретным конечным точкам REST.

файл конфигурации безопасности: -

@Configuration
@EnableOAuth2Sso
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/login" )
        .authorizeRequests()
        .antMatchers("/**", "/webjars/**", "/error**")
        .permitAll();
    }
}

Класс фильтра: -

@Component
@Order(1)
@Slf4j
public class TransactionFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        HttpSession session = req.getSession(false);

        String requestURL = req.getRequestURL().toString();

        if(session != null){
            SecurityContextImpl sci = (SecurityContextImpl) session.getAttribute("SPRING_SECURITY_CONTEXT");

            if (sci != null) {
                OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) sci.getAuthentication();
                System.out.println(" oAuth2Authentication "+oAuth2Authentication.getUserAuthentication());
            }
        }

        chain.doFilter(request, response);
    }
} 

Вот так выглядит моя конечная точка отдыха, я пытаюсь обеспечить к ней доступ, используя okta auth2: -

@RequestMapping("/api/v1")
public interface DataPullClientApi {

    @ResponseStatus(value = HttpStatus.ACCEPTED)
    @RequestMapping(value = "/DataPullPipeline", method = POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    ResponseEntity startDataPull(HttpEntity<String> inputJson);
}

После успешной аутентификации в / login я перенаправляюсь на index.html, который простоу меня есть поле ввода текста, в которое я ввожу json, и при нажатии кнопки отправки он вызывает конечную точку / DataPullPipeline Rest, предоставленную выше через некоторые вызовы ajax.

Фактические результаты: - когда я иду на http://localhost:8080/login, Я перенаправлен на страницу входа в Okta, что ожидается.После аутентификации я перенаправлен на index.html.В index.html я ввожу входные данные json, которые затем отправляются на конечную точку REST на стороне сервера, что также правильно. Результат оператора println в классе фильтра выглядит примерно так:Полномочия: [ЗАЩИЩЕНО];Аутентифицировано: правда;Подробности: {ver = 1, jti = xxxxx, iss = https://dev -xxxx.okta.com / oauth2 / default , aud = api: // default, iat = xxx, exp = xxx, cid= xxx, uid = xxx, scp = [профиль, openid, электронная почта], sub=snautiyal@xxxxx.com};Не предоставлено никаким властям

Мои вопросы: - 1) Действительно ли мои конечные точки защищены этим подходом, я ничего не делаю для их защиты, я просто защищаю свою конечную точку / вход в систему.Я не знаю, обеспечивает ли это защиту остальных конечных точек на перенаправленной странице.Если мои остальные конечные точки не защищены, что я должен сделать, чтобы защитить их.2) В моем классе фильтра я могу получить информацию о зарегистрированном пользователе из SecurityContextImpl.Строка 'System.out.println ("oAuth2Authentication" + oAuth2Authentication.getUserAuthentication ());'выводит данные о пользователе, вошедшем в системуЯ получаю эту информацию, даже если я не установил аутентификацию на моих конечных точках REST.Безопасно ли отвечать на эту информацию для авторизованного пользователя.

Заранее большое спасибо.

...