Spring Security Digest-Authentifizierung

Spring Security Digest-Authentifizierung

1. Überblick

Dieses Tutorial zeigt, wie Digest-Authentifizierung mit Spring eingerichtet, konfiguriert und angepasst wird. Ähnlich wie bei den vorherigenarticle covering Basic Authentication werden wir auf dem Spring MVC-Lernprogramm aufbauen und die Anwendung mit dem von Spring Security bereitgestellten Digest Auth-Mechanismus sichern.

2. Die Sicherheits-XML-Konfiguration

Das erste, was Sie über die Konfiguration wissen sollten, ist, dass Spring Security zwar die sofortige Unterstützung für den Digest-Authentifizierungsmechanismus bietet, diese Unterstützung jedochnot as well integrated into the namespace beträgt, wie dies bei der Standardauthentifizierung der Fall war.

In diesem Fall müssen wirdefine the raw beans manuell erstellen, aus denen die Sicherheitskonfiguration besteht - dieDigestAuthenticationFilter und dieDigestAuthenticationEntryPoint:


    
    


    
    




    

    



    
        
            
        
    

Als nächstes müssen wir diese Beans in die gesamte Sicherheitskonfiguration integrieren - und in diesem Fall ist der Namespace immer noch flexibel genug, um dies zu ermöglichen.

Der erste Teil zeigt auf die benutzerdefinierte Einstiegspunkt-Bean über das Attributentry-point-ref des Hauptelements<http>.

Der zweite Teil istadding the newly defined digest filter into the security filter chain. Da dieser Filter funktional äquivalent zuBasicAuthenticationFilter ist, verwenden wir dieselbe relative Position in der Kette - dies wird durch den AliasBASIC_AUTH_FILTER inSpring Security Standard Filters insgesamt angegeben.

Beachten Sie schließlich, dass der Digest-Filter aufpoint to the user service bean konfiguriert ist - und hier ist der Namespace wieder sehr nützlich, da wir einen Bean-Namen für den Standardbenutzerdienst angeben können, der durch das Element<user-service> erstellt wurde:

3. Konsumieren der gesicherten Anwendung

Wir werdenthe curl command verwenden, um die gesicherte Anwendung zu nutzen und zu verstehen, wie ein Client mit ihr interagieren kann.

Beginnen wir mit der Anforderung der Homepage -without providing security credentials in der Anforderung:

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

Wie erwartet erhalten wir eine Antwort mit dem Statuscode401 Unauthorizedzurück:

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

Wenn diese Anforderung vom Browser gesendet würde, würde die Authentifizierungsaufforderung den Benutzer über einen einfachen Benutzer- / Kennwortdialog zur Eingabe von Anmeldeinformationen auffordern.

Lassen Sie uns jetztprovide the correct credentials und senden Sie die Anfrage erneut:

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

Beachten Sie, dass wir die Digest-Authentifizierung für den Befehlcurl über das Flag–digest aktivieren.

Die erste Antwort vom Server ist dieselbe -401 Unauthorized -, aber die Herausforderung wird jetzt von einer zweiten Anforderung interpretiert und beantwortet - die mit200 OK erfolgreich ist:

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

Ein letzter Hinweis zu dieser Interaktion ist, dass ein Clientpreemptively send the correct Authorization header mit der ersten Anforderung und damit vollständigavoid the server security challenge und der zweiten Anforderung kann.

4. Die Maven-Abhängigkeiten

Die Sicherheitsabhängigkeiten werden inSpring Security Maven tutorial ausführlich erläutert. Kurz gesagt, wir müssenspring-security-web undspring-security-config als Abhängigkeiten in unserenpom.xml definieren.

5. Fazit

In diesem Tutorial führen wir die Sicherheit in ein einfaches Spring MVC-Projekt ein, indem wir die Digest-Authentifizierungsunterstützung im Framework nutzen.

Die Implementierung dieser Beispiele finden Sie inthe github project - dies ist ein Eclipse-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.

Wenn das Projekt lokal ausgeführt wird, kann auf die HTML-Startseite unter (oder bei minimaler Tomcat-Konfiguration über Port 80) zugegriffen werden:

Schließlich gibt es keinen Grund, warum eine Anwendungchoose between Basic and Digest authentication -both can be set up simultaneously on the same URI structure benötigt, so dass der Client beim Konsumieren der Webanwendung zwischen den beiden Mechanismen wählen kann.