Как предотвратить фиксацию сеанса с настройкой Keycloak Spring Security? - PullRequest
0 голосов
/ 24 марта 2020

Мы используем keycloak в качестве провайдера идентификации и доступа, который связан с пружинной защитой с помощью адаптера пружинной безопасности keycloak. Мы поняли, что идентификатор сеанса не изменяется, когда пользователь входит в приложение, которое является открытой дверью для атак фиксации сеанса. И клавиатурный ключ, и пружинная защита предоставляют решения для предотвращения фиксации сеанса, но когда я использую оба в комбинации, ни один из них не работает должным образом.

Из документации ключевого плаща :

turn-off-change-session-id-on-login

Идентификатор сеанса по умолчанию изменяется при успешном входе в систему на некоторых платформах для подключения вектора атаки безопасности. Измените это на true, если вы хотите отключить это НЕОБЯЗАТЕЛЬНО. Значение по умолчанию - false.

Я не отключил эту функцию, но идентификатор сеанса остается неизменным после процедуры входа в систему.

Безопасность Spring поставляется вместе с двумя реализациями SessionAuthenticationStrategy, ChangeSessionIdAuthenticationStrategy и SessionFixationProtectionStrategy, но ни один из них не сработает.

В keycloak doku вы можете найти подсказку, что "SessionFixationProtectionStrategy в настоящее время не поддерживается" , но нет никаких советов, как бороться с риском фиксации сеанса в этой настройке. Но согласно этой подсказке все еще должна быть возможность изменить идентификатор сеанса с пружинной защитой, в результате чего «универсальный выход из системы больше не будет работать» . Но даже при этом я не могу работать (возможно, мы могли бы go с компромиссом и потерять универсальный выход из системы) Я попытался изменить идентификатор сеанса с помощью Spring Security некоторыми способами (извлечение файла конфигурации):

  1. перезаписать фильтр управления сеансами по умолчанию, следуя этим инструкциям
<http use-expressions="true" auto-config="false" entry-point-ref="keycloakAuthenticationEntryPoint">
[...]
     <!-- changeSessionId and newSession have no result at all -->
     <session-management session-fixation-protection="none"/>
     <session-management session-authentication-strategy-ref="sessionAuthenticationStrategy"/>
     <custom-filter ref="sessionManagementFilter" position="SESSION_MANAGEMENT_FILTER"/>
[...]
</http>
<beans:bean id="sessionAuthenticationStrategy"
        class="org.springframework.security.web.authentication.session.ChangeSessionIdAuthenticationStrategy"/>
<beans:bean id="sessionManagementFilter" class="org.springframework.security.web.session.SessionManagementFilter">
        <beans:constructor-arg name="securityContextRepository" ref="securityContextRepository"/>
        <beans:constructor-arg name="sessionStrategy" ref="sessionAuthenticationStrategy"/>
</beans:bean>
Перезаписать фильтр управления сеансами по умолчанию этой инструкцией
<http ...>
    <session-management session-authentication-strategy-ref="sessionStrategy"/>
</http>

<bean id="sessionStrategy" class="org.springframework.security.web.authentication.session.ChangeSessionIdAuthenticationSessionStrategy"/>
Изменение поведения фильтра управления сеансом по умолчанию в соответствии с документацией пружины
<http use-expressions="true" auto-config="false" entry-point-ref="keycloakAuthenticationEntryPoint">
[...]
     <!-- changeSessionId and newSession have no result at all -->
     <session-management session-fixation-protection="changeSessionId"/>
[...]
</http>

Любые советы приветствуются в отношении предотвращения фиксации сеанса в среде безопасности пружины keycloak.

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