Я пытаюсь аутентифицировать все запросы, поступающие на мои остальные конечные точки, особенно запросы 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.Безопасно ли отвечать на эту информацию для авторизованного пользователя.
Заранее большое спасибо.