Authentification Spring Security Digest

Authentification Spring Digest Security

1. Vue d'ensemble

Ce didacticiel explique comment configurer, configurer et personnaliser l’authentification Digest avec Spring. Comme pour lesarticle covering Basic Authentication précédents, nous allons construire sur le didacticiel Spring MVC et sécuriser l'application avec le mécanisme Digest Auth fourni par Spring Security.

2. La configuration XML de sécurité

La première chose à comprendre à propos de la configuration est que, bien que Spring Security ait une prise en charge complète prête à l'emploi pour le mécanisme d'authentification Digest, cette prise en charge estnot as well integrated into the namespace comme l'était l'authentification de base.

Dans ce cas, nous devons manuellement lesdefine the raw beans qui vont constituer la configuration de sécurité - lesDigestAuthenticationFilter et lesDigestAuthenticationEntryPoint:


    
    


    
    




    

    



    
        
            
        
    

Ensuite, nous devons intégrer ces beans dans la configuration de sécurité globale - et dans ce cas, l’espace de noms reste suffisamment flexible pour nous permettre de le faire.

La première partie de ceci pointe vers le bean de point d'entrée personnalisé, via l'attributentry-point-ref de l'élément principal<http>.

La deuxième partie estadding the newly defined digest filter into the security filter chain. Puisque ce filtre est fonctionnellement équivalent auxBasicAuthenticationFilter, nous utilisons la même position relative dans la chaîne - ceci est spécifié par l'aliasBASIC_AUTH_FILTER dans l'ensemble desSpring Security Standard Filters.

Enfin, notez que le filtre de résumé est configuré surpoint to the user service bean - et ici, l'espace de noms est à nouveau très utile car il nous permet de spécifier un nom de bean pour le service utilisateur par défaut créé par l'élément<user-service>:

3. Utilisation de l'application sécurisée

Nous allons utiliserthe curl command pour consommer l'application sécurisée et comprendre comment un client peut interagir avec elle.

Commençons par demander la page d'accueil -without providing security credentials dans la requête:

curl -i http://localhost/spring-security-mvc-digest-auth/homepage.html

Comme prévu, nous obtenons une réponse avec un code d'état401 Unauthorized:

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=CF0233C...; Path=/spring-security-mvc-digest-auth/; HttpOnly
WWW-Authenticate: Digest realm="Contacts Realm via Digest Authentication", qop="auth",
  nonce="MTM3MzYzODE2NTg3OTo3MmYxN2JkOWYxZTc4MzdmMzBiN2Q0YmY0ZTU0N2RkZg=="
Content-Type: text/html;charset=utf-8
Content-Length: 1061
Date: Fri, 12 Jul 2013 14:04:25 GMT

Si cette requête a été envoyée par le navigateur, la procédure d'authentification demandera à l'utilisateur de fournir ses informations d'identification à l'aide d'une simple boîte de dialogue utilisateur / mot de passe.

Nous allons maintenantprovide the correct credentials et renvoyer la demande:

curl -i --digest --user
   user1:user1Pass http://localhost/spring-security-mvc-digest-auth/homepage.html

Notez que nous activons l'authentification Digest pour la commandecurl via l'indicateur–digest.

La première réponse du serveur sera la même - les401 Unauthorized - mais le défi sera maintenant interprété et traité par une deuxième requête - qui réussira avec un200 OK:

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=A961E0D...; Path=/spring-security-mvc-digest-auth/; HttpOnly
WWW-Authenticate: Digest realm="Contacts Realm via Digest Authentication", qop="auth",
  nonce="MTM3MzYzODgyOTczMTo3YjM4OWQzMGU0YTgwZDg0YmYwZjRlZWJjMDQzZWZkOA=="
Content-Type: text/html;charset=utf-8
Content-Length: 1061
Date: Fri, 12 Jul 2013 14:15:29 GMT

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=55F996B...; Path=/spring-security-mvc-digest-auth/; HttpOnly
Content-Type: text/html;charset=ISO-8859-1
Content-Language: en-US
Content-Length: 90
Date: Fri, 12 Jul 2013 14:15:29 GMT





    

This is the homepage

Une dernière remarque sur cette interaction est qu'un client peutpreemptively send the correct Authorization header avec la première requête, et donc entièrementavoid the server security challenge et la seconde requête.

4. Les dépendances Maven

Les dépendances de sécurité sont discutées en profondeur dans lesSpring Security Maven tutorial. En bref, nous devrons définirspring-security-web etspring-security-config comme dépendances dans nospom.xml.

5. Conclusion

Dans ce didacticiel, nous introduisons la sécurité dans un simple projet Spring MVC en exploitant le support Digest Authentication dans la structure.

L'implémentation de ces exemples peut être trouvée dansthe github project - il s'agit d'un projet basé sur Eclipse, il devrait donc être facile à importer et à exécuter tel quel.

Lorsque le projet s'exécute localement, vous pouvez accéder à la page d'accueil html à l'adresse (ou, avec une configuration minimale de Tomcat, sur le port 80):

Enfin, il n'y a aucune raison qu'une application ait besoin dechoose between Basic and Digest authentication -both can be set up simultaneously on the same URI structure, de telle sorte que le client puisse choisir entre les deux mécanismes lors de la consommation de l'application Web.