Запомните целевой URL без HTTP-сессии - PullRequest
0 голосов
/ 04 февраля 2019

В контексте внутреннего прокси-сервера 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);
  • Набор authenticateAllArtifactstrue в 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, но на самом деле я не нашел, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...