Требовать аутентификацию через https с помощью Spring Security? - PullRequest
2 голосов
/ 09 сентября 2010

Я использую tomcat 6, spring mvc 3.0.0 и spring security 3.0.0, и, поскольку пароли, которые я храню в базе данных, хэшированы с помощью sha1, я не могу использовать дайджест-проверку подлинности ( раздел 9.2.1 из документации написано, что ). По этой причине мне нужно, чтобы аутентификация происходила через https.

Из-за возможных накладных расходов на обработку я хочу сохранить как можно больше трафика в обычном http. Есть ли способ заставить Spring использовать https для запросов без аутентификации, а затем использовать http после завершения аутентификации? Я думаю, что это делается с помощью какого-либо ChannelProcessingFilter, но я поставлен в тупик относительно деталей.

Вот мой файл application-security.xml в его текущем виде:

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <http use-expressions="true">
        <intercept-url pattern="/**" access="isAuthenticated()" />
        <http-basic />
    </http>

    <authentication-manager>
        <authentication-provider user-service-ref="myUserDetailsService">
            <password-encoder hash="sha"/>
        </authentication-provider>
    </authentication-manager>

    <beans:bean id="myUserDetailsService"
        class="path.to.myUserDetailsServiceImpl">
    </beans:bean>

</beans:beans>

Спасибо за помощь.

Ответы [ 2 ]

6 голосов
/ 09 сентября 2010

Если в любой момент вы передаете идентификатор сеанса через HTTP, вы нарушаете OWASP A9 . Злоумышленнику не нужен пароль, если у него есть идентификатор сеанса. Я бы не стал реализовывать эту функцию в вашем приложении, https очень легок, и я думаю, что вам стоит заняться экономией ресурсов там, где это не означает, что ваши клиенты будут взломаны

3 голосов
/ 09 сентября 2010

Не уверен, как именно это сделать с помощью Spring MVC, но я сделал это с помощью Grails с Spring Security 3 ... если вам интересно, вы можете увидеть мой пост здесь .

Потому что это вам не очень поможет ... Я сделал быстрый поиск в Google и нашел эту запись, которая выглядит правильно и говорит о настройке вашего web.xml:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/applicationContext-security.xml
    </param-value>
</context-param>

     <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

и вашейapplicationContext-security.xml как таковой:

  <beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">

    <http>
        <intercept-url pattern="/url1.htm"
        access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https" />
        <intercept-url pattern="/url2.htm"
        access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https" />
        <intercept-url pattern="/**"
        access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="http" />

        <anonymous />
        <http-basic/>
    </http>

    <!-- This bean is optional; it isn't used by any other bean as it only listens and logs -->
    <beans:bean id="loggerListener" class="org.springframework.security.event.authentication.LoggerListener"/>

</beans:beans>

Также посмотрите на этот сайт для получения дополнительной информации и как настроить соединитель SSL tomcats.

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