Обнаружение воспроизведения SAML

У нас есть веб-приложение на основе Java, которое использует SAML 2.0 для SSO. В рамках единого входа мы также внедрили единый выход. Может ли кто-нибудь поделиться информацией о том, как исправить следующую проблему

  • Пользователь входит в IDP(app1)
  • Пользователь нажимает ссылку на SP (app2)
  • Пользователь выходит из IDP. SP получает запрос на выход из системы, и сеанс становится недействительным.
  • Пользователь обновляет браузер, в котором открыт SP(app2), и исходный запрос IDP повторно отправляется. SP обрабатывает этот запрос, как если бы он поступил от IDP. При этом пользователь по-прежнему может перемещаться/использовать app2, даже если он вышел из IDP.

Я думаю, что лучшее решение — вернуться к IDP и проверить, действителен ли сеанс (на основе SAML SessionIndex), но не уверен, как мы можем это сделать. Обратите внимание, что обновление браузера работает только в пределах окна, указанного NotBefore и NotOnOrAfter. Если пользователь пытается обновиться из этого окна, у нас есть логика, которая отклоняет запрос/ответ.


person user1839702    schedule 24.10.2018    source источник


Ответы (1)


SP также должен проверять воспроизведение утверждений SAML. Каждое утверждение SAML включает уникальный идентификатор. Ваш SP должен отслеживать их до истечения срока их действия (т. е. до NotOnOrAfter). Когда вы получаете утверждение SAML, если ваш SP уже видел идентификатор, утверждение SAML должно быть отклонено.

person ComponentSpace    schedule 25.10.2018
comment
В том же духе я думал об использовании SessionIndex, который является частью Assertion. Это тоже уникально? - person user1839702; 25.10.2018
comment
Да, хотя SessionIndex является необязательным и часто устанавливается равным идентификатору утверждения в соответствии с рекомендациями спецификации SAML. Идентификатор является обязательным. - person ComponentSpace; 26.10.2018