Frage

Meine Forderung ist zu schaffen:

  1. Benutzer-ID Passwort basierte Authentifizierung.
  2. Öffnen id basierte Authentifizierung
  3. URL basierte Authentifizierung (seine eine benutzerdefinierte sso impl wir haben)

im selben Projekt.

Ich habe versucht, im Frühjahr Sicherheit in ein bestehendes Projekt als (Code der Einfachheit halber abgespeckte) anschließen:

<?xml version="1.0" encoding="UTF-8"?>
<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 auto-config="false">
        <remember-me user-service-ref="rememberMeUserService" key="some custom key" /> <!-- TODO: Key made for testing reasons.... -->
        <intercept-url pattern='/mainApplication/Main screen.html' access="ROLE_ADMIN"/>
        <intercept-url pattern='/**' filters="none"/> <!-- Allow entry to login screen -->
        <openid-login authentication-failure-url="/Login.html?error=true" default-target-url="/mainApplication/Main screen.html" user-service-ref="openIdUserService"/>
        <form-login login-page="/Login.html" authentication-failure-url="/Login.html?error=true" always-use-default-target="true" default-target-url="/mainApplication/Main screen.html"/>
    </http>

    <beans:bean id="rememberMeUserService" class="mypackage.CustomUserService">
        <beans:property name="usersService" ref="usersService"></beans:property>
    </beans:bean>

    <!-- Common login shared entry-point for both Form and OpenID based logins -->    
    <beans:bean id="entryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
        <beans:property name="loginFormUrl" value="/Login.html" />
    </beans:bean>
    <authentication-manager alias="authenticationManager"/>

    <beans:bean id="MyCustomAuthenticationProvider" class="mypackage.CustomAuthenticationProvider">
        <custom-authentication-provider />
        <beans:property name="usersService" ref="usersService"></beans:property>
    </beans:bean>

    <beans:bean id="openIdAuthenticationProvider" class="org.springframework.security.providers.openid.OpenIDAuthenticationProvider">
        <custom-authentication-provider />
        <beans:property name="userDetailsService" ref="openIdUserService"/>
    </beans:bean>

    <beans:bean id="openIdUserService" class="mypackage.OpenIDUserDetailsService">
        <beans:property name="usersService" ref="usersService"/>
    </beans:bean>

    <!-- Great, now i want to include SSO based sign on -->
    <!-- need to intercept a url of the form :   /myApp/customLogin/<key> where <key> is my token key   -->

</beans:beans>

, wie oben erwähnt, ich brauche eine URL der Form zu verfolgen: / myApp / customLogin / 12345, wo 1235 die Token-Schlüssel ist, waren wir zunächst (Code der Einfachheit halber abgespeckte) mit

<servlet-mapping>
    <servlet-name>mySSOCapture</servlet-name>
    <url-pattern>/myApp/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
</servlet-mapping>

Was soll ich hier tue Frühling Sicherheit zu ermöglichen, mir dieses dritte Authentifizierungsschema helfen zu verwalten?

eine logische Folge Frage ist: kann ich viele Authentifizierungsanbieter im selben Projekt? wenn ja, dann wie können sie auf verschiedene Funktionalitäten angepasst werden (zB eine URL basierte Authentifizierung bereitstellt, eine Bereitstellung von anonomous Auth, usw.)?

War es hilfreich?

Lösung 3

Okay, hier ist die Lösung:

<beans:bean id="mySsoFilter" class="somePackage.MySsoProcessingFilter">
    <custom-filter after="CAS_PROCESSING_FILTER"/> <!-- Just a reference Point-->
    <beans:property name="authenticationManager" ref="authenticationManager"/>
    <beans:property name="defaultTargetUrl" value='/mainApplication/Main screen.html' />
    <beans:property name="authenticationFailureUrl" value="/Login.html?error=true"/>
</beans:bean>

Hope, das hilft jemand in Not ...

Andere Tipps

Kann die Frage nicht direkt beantworten, aber einen ‚hilfreichen Hinweis‘ aus dem Identity-Management-Sektor. Nicht alle Authentifizierungssysteme haben den gleichen Vertrauenswert - Es ist eine ernste Verletzung des guten Sicherheitsdesigns sie gleich zu behandeln

Ich hoffe, das hilft mit Ihrem Design ...

Es gibt wahrscheinlich mehr Möglichkeiten, dies zu tun. Es gibt einige Funktionen, die etwas sehr ähnliches tut, nämlich Pre-Authentifizierung . Es ist ein gutes Beispiel für eine Art und Weise, dass Sie einen benutzerdefinierten Filter hinzufügen können, die den Benutzer authentifiziert, wonach der Rest des Rahmens übernehmen sollte.

Was für ein AuthenticationProvider tut, ist das Authentication Objekt untersuchen, die in der Sitzung, die von einem früheren Filter geladen wird. Sie können so viele Authentifizierungsanbieter registrieren, wie Sie mit dem Authentifizierungs-Manager wollen (das das Objekt einfach durch alle von ihnen Authentication läuft), aber Sie haben zu verwalten dort einige Filter zu bekommen, dass Ihr Authentifizierungsschema behandelt und das Authentication Objekt füllen. Wenn Sie diese Filter wollen auch mit dem Benutzer interagieren (d zeigt ein Anmeldeformular oder etwas) es mit anderen Filtern stören könnte. In diesem Fall können Sie separate Filterketten verwenden, aber das klingt nicht wie es in Ihrem Fall notwendig wäre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top