2010-09-09 12 views
2

J'utilise tomcat 6, spring mvc 3.0.0 et spring security 3.0.0, et comme les mots de passe stockés dans la base de données sont sha1 hachés, je ne peux pas utiliser l'authentification digest (section 9.2.1 of the documentation spells that out). Pour cette raison, j'ai besoin de faire de l'authentification via https. En raison du surcoût de traitement potentiel, je souhaite conserver autant de trafic que possible dans le protocole http standard. Y a-t-il un moyen que je puisse utiliser https pour les demandes non-motivées, puis utiliser http une fois l'authentification terminée? Je pense que cela est fait avec un ChannelProcessingFilter de quelque sorte, mais je suis perplexe quant aux détails.Exiger l'authentification via https avec la sécurité de printemps?

Voici mon fichier application security.xml tel qu'il est actuellement:

<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> 

Merci pour l'aide.

Répondre

6

Si, à un moment donné, vous passez un identifiant de session sur HTTP, vous enfreignez OWASP A9. Un attaquant n'a pas besoin du mot de passe s'il possède l'identifiant de session. Je ne voudrais pas implémenter cette fonctionnalité dans votre application, https est très léger et je pense que vous devriez envisager d'économiser des ressources dans des endroits qui ne signifie pas que vos clients seront piratés.

3

Je ne sais pas exactement comment le faire en utilisant Spring MVC mais je l'ai fait en utilisant Grails avec Spring Security 3 ... si vous êtes intéressé, vous pouvez voir mon blog here.

Parce que cela ne vraiment vous aider ... Je fait une recherche rapide sur Google et a trouvé this poste qui semble correct et dit configurer votre 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> 

et votre applicationContext-security.xml en tant que tel:

<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> 

Jetez aussi un coup d'oeil à ce site pour plus d'informations et comment configurer matous connecteur SSL.