Мне нужно реализовать как JWT, так и x509 в Spring. В основном сценарий был бы следующим:
- пользователь пытается ввести конечную точку, скажем,
/info
Для этого он должен предоставить JWT, и если у него его нет (или он недействителен), сертификат x509 будет должны быть представлены, чтобы идентифицировать себя - после того, как убедится, что такой пользователь действительно существует, новый JWT будет сгенерирован и передан пользователю, чтобы он затем мог представить себя с ним при запросе упомянутой
/info
конечной точки
Я не хочу запрашивать сертификат x509 в каждом запросе - сразу после истечения срока действия JWT или в случае его отсутствия
Теперь я реализовал получение JWT (работает нормально) и аутентификацию пользователей с x509 (работает нормально) отдельно, но у меня проблемы с соединением этих двух вещей для совместной работы, как задумано.
Часть JWT:
http
.cors()
.and().csrf().disable()
.exceptionHandling().authenticationEntryPoint(authEntryPointJwt).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.addFilter(new JwtAuthorizationFilter(authenticationManager(), userService))
.authorizeRequests()
.antMatchers("/auth/**").permitAll()
.antMatchers("/**").authenticated();
x509 часть:
http
.authorizeRequest()
.anyRequest()
.authenticated()
.and()
.x509()
.subjectPrincipalRegex("XX=(.*?)")
.userDetailsService(userDetailsService());