В контексте внутреннего прокси-сервера CAS мои пользователи часто имеют страницу перенаправления по умолчанию вместо исходной страницы.
В рабочем процессе моего приложения, когда мне нужно получить доступ к серверу ресурсов из моего веб-приложения, он должен иметь действительный токен JWT, предоставленный сервером Oauth2 (который работает с spring-security-oauth2 и spring-security-cas).Если у сервера Oauth2 есть сеанс CAS для этого пользователя, он дает ему токен JWT, в противном случае он перенаправляет его на страницу входа в CAS.
В механизме Spring-security-cas моего сервера Oauth2 он сохраняет исходный запрос.(URI веб-приложения, откуда я пришел) в сеансе HTTP, пока пользователь заполняет страницу входа в систему CAS.Если вход выполнен успешно, пользователь перенаправляется на конечную точку моего бэкэнда, а ранее сохраненный запрос используется для создания перенаправления в мое веб-приложение (https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#form-login-flow-handling).
В моем приложении часто случается, что он не находит этосохраненный запрос. Поскольку сеанс истек. В этом случае он перенаправляет на страницу по умолчанию моего бэкэнда.
Я мог бы увеличить время истечения сеанса http моего сервера, но это не решило бы проблему.
Для меня лучше всего было бы перенаправить исходный URI на запрос, отправленный на вход в CAS (в параметре «service»). Чтобы быть без сохранения состояния.
Я пытался это изменить:
- В моей конфигурации http:
sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
- В моей конфигурации http настраиваемый AuthenticationSuccessHandler, который устанавливает
targetUrlParameter
:
SimpleUrlAuthenticationSuccessHandler handler = new SimpleUrlAuthenticationSuccessHandler();
handler.setTargetUrlParameter("redirect_uri");
casAuthenticationFilter.setAuthenticationSuccessHandler(handler);
- Набор
authenticateAllArtifacts
true
в bean-объекте serviceProperties - Настроенные AuthenticationDetailsSource и CasAuthenticationEntryPoint с «dynamicServiceResolver», как Мэтт, сделано здесь: https://stackoverflow.com/a/28592699/8913925
My bКонечная точка ackend хорошо вызывается после успешного входа в систему (с redirect_uri).
Но в фазе проверки (когда мой внутренний вызов CAS с Service Ticket для / serviceValidate endpoint) мой CAS говорит мне «INVALID_TICKET»мой билет неизвестен.
РЕДАКТИРОВАТЬ: [извините, это была ошибка, вызванная режимом отладки (срок действия заявки короткий)] Но, когда перенаправление на исходный запрос выполнено (GET http://oauth2/jwt-token в моем случае), он видит меня как анонимного пользователя.
Я ожидаю вызова CAS без использования сеанса HTTP, но на самом деле я не нашел, как это сделать.