Question Sécurité de printemps - comment mentionner à la fois l'authentification basée sur le formulaire et l'authentification de base


Est-il possible de mentionner à la fois l'authentification par formulaire et l'authentification de base dans la sécurité Spring à l'aide de la configuration de l'espace de noms sans surcharger l'autre? Pour que l'application puisse servir à la fois la requête basée sur le navigateur et le client distant.


13
2017-08-19 00:13


origine


Réponses:


le réponse de @grimesjm est correct. Cependant, si vous utilisez Spring 3.x, vous devez adapter les noms de classe à:

<bean id="basicProcessingFilter" class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
    <property name="authenticationManager">
        <ref bean="authenticationManager" />
    </property> 
    <property name="authenticationEntryPoint">
        <ref bean="authenticationEntryPoint" />
    </property>
</bean>

<bean id="authenticationEntryPoint"
    class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
    <property name="realmName" value="Your realm here" />
</bean>

Et

<sec:http auto-config="true">
    ... your intercept-url here

    <sec:custom-filter before="SECURITY_CONTEXT_FILTER" ref="basicProcessingFilter" />

    <sec:form-login ... />
    ....
</sec:http>

Je ne sais pas si placer le filtre avant SECURITY_CONTEXT_FILTER est la meilleure option ou non.


10
2018-04-29 18:39



Le résultat final que vous souhaitez est possible, j'ai rencontré exactement le même problème et voici ma solution.

À tout moment, lors de la définition d'une connexion de formulaire dans l'espace de noms, il remplacera automatiquement tous les autres filtres d'authentification appliqués via l'espace de noms. Cela se fait en ordonnant la chaîne de filtres à FilterChainOrder.java dans la sécurité du printemps pour voir comment l'ordre est réellement appliqué à chaque filtre.

Pour contourner ce problème, supprimez la balise http-basic de l'espace de noms, puis définissez manuellement le bean pour gérer l'authentification de base et passez sa commande avant AuthenticationProcessingFilter car il s'agit du filtre de sécurité Spring qui gérera la connexion de formulaire.

Le ressort BasicProcessingFilter permet de gérer l'authentification de base est un filtre passif, ce qui signifie que si les informations d'identification sont manquantes, il continuera dans la chaîne de filtrage jusqu'à ce qu'il trouve le filtre approprié pour gérer la demande.

Maintenant, en définissant manuellement le bean BasicProcessingFilter, nous pouvons définir l'ordre dans lequel il apparaîtra dans la chaîne de filtres. Vous trouverez ci-dessous un exemple des déclarations xml supplémentaires que vous devrez fournir dans le fichier XML de sécurité (Spring Security <3.x)

<bean id="basicProcessingFilter" class="org.springframework.security.ui.basicauth.BasicProcessingFilter">
    <property name="authenticationManager"><ref bean="authenticationManager"/></property>
     <security:custom-filter before="AUTHENTICATION_PROCESSING_FILTER"/>
    <property name="authenticationEntryPoint"><ref bean="authenticationEntryPoint"/></property>
</bean>

<bean id="authenticationEntryPoint"
    class="org.springframework.security.ui.basicauth.BasicProcessingFilterEntryPoint">
              <property name="realmName" value="My Realm Here"/>
</bean>

Notez également que si votre référence authenticationManager n'est pas trouvée, vous pouvez ajouter un alias à votre espace de noms comme celui ci-dessous.

<security:authentication-manager alias="authenticationManager"/>

Le résultat final est que le filtre de base sera appliqué en tant que filtre passif et si ses informations d'identification requises sont manquantes, il continuera dans la chaîne de filtres et le filtre de connexion de formulaire le gérera.

Le problème avec cette approche est que si les informations d'identification sont correctement entrées, la réponse est la page de connexion du filtre de connexion de formulaire.

Cependant, il semble que ce problème sera résolu au printemps dans la version 3.1 de la sécurité du printemps et que ce travail ne sera plus nécessaire.


6
2017-11-06 19:45



C'est désormais possible avec Spring Security 3.1.0


1
2017-12-14 18:03



Il semble qu’il ne soit pas possible de déclarer à la fois l’authentification par formulaire et l’authentification de base en utilisant la configuration de l’espace de noms.

Un lien de référence vers la communauté printanière:   http://forum.springsource.org/showthread.php?t=72724&highlight=form+basic+authentication


0
2017-08-20 09:38