Für einige Webdienste möchte ich die Verwendung von Sitzungen deaktivieren. Ich fügte hinzu, create-session = „never“ auf die config:Spring-Option create-session = "nie" wird in einigen Szenarien ignoriert?
<beans:bean id="http403EntryPoint"
class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/>
<http use-expressions="true" entry-point-ref="http403EntryPoint"
create-session="never">
<custom-filter ref="x509Filter" position="PRE_AUTH_FILTER"/>
</http>
Dies funktioniert für die meisten Fälle, mit der Ausnahme, wenn die Pre-authentifizierten Benutzer ein Client-Zertifikat hat, die in der Anwendung nicht registriert ist, so unsere AuthenticationUserDetailsService löst einen BenutzernameNotFoundException aus. Wenn der Benutzer kein Zertifikat besitzt oder ein registriertes Zertifikat besitzt, wird keine Sitzung erstellt (keine Set-Cookie-Kopfzeile in der HTTP-Antwort). Im beschriebenen Fall wird ein Cookie gesendet. Es (der Cookie bzw. die Sitzung) wird auch bei jeder folgenden Anfrage ausgewertet, selbst wenn das Client-Zertifikat geändert wird (grundsätzlich erlaubt es einen Sitzungsfixierungsangriff - die App verwendet die gespeicherte Authentifizierung, anstatt sich bei jedem Anruf erneut zu authentifizieren).
Wir verwenden Spring Sicherheit 3.0.5. Getestet mit Tomcat 6 und 7 und JBoss 7.1.1.
Warum wird in dem beschriebenen Szenario eine Sitzung erstellt?
PS: Das Session-Fixation-Problem kann wahrscheinlich durch Setzen checkForPrincipalChanges im AbstractPreAuthenticatedProcessingFilter workarounded werden, aber ich bin an der Antwort, warum eine Sitzung überhaupt entsteht.