tutorial example authorizerequests java spring configuration spring-security

java - example - ¿Puedo poner 3 esquemas de autenticación diferentes en la misma configuración de seguridad de primavera?



spring security tutorial (3)

Mi requisito es proporcionar:

  1. Autenticación basada en contraseña de usuario.
  2. Identificación basada en autenticación abierta
  3. Autenticación basada en URL (es una implementación ss personalizada que tenemos)

en el mismo proyecto

Intenté conectar la seguridad Spring en un proyecto existente como (código simplificado para simplificar):

<?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>

como se mencionó anteriormente, necesito rastrear una url de la forma: / myApp / customLogin / 12345 donde 1235 es la clave de token, que estábamos usando inicialmente (código simplificado)

<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>

¿Qué debería hacer aquí para permitir que la seguridad primaveral me ayude a gestionar este tercer esquema de autenticación?

una pregunta corolario es: ¿puedo tener muchos proveedores de autenticación en el mismo proyecto? En caso afirmativo, ¿cómo pueden combinarse con diferentes funcionalidades (por ejemplo, una que proporciona autenticación basada en url, una que proporciona autenticación anónima, etc.)?


No se puede responder a la pregunta directamente, pero es una "pista útil" del sector de gestión de identidades: no todos los sistemas de autenticación tienen el mismo valor de confianza: es una violación grave del buen diseño de seguridad tratarlos por igual.

Espero que esto ayude con tu diseño ...


Probablemente haya varias formas de hacer esto. Hay alguna funcionalidad que hace algo muy similar, a saber , autenticación previa . Es un buen ejemplo de cómo puede agregar un filtro personalizado que autentique al usuario, después de lo cual el resto del marco debería tomar el control.

Lo que hace un AuthenticationProvider es examinar el objeto de Authentication que se carga en la sesión por un filtro anterior. Puede registrar tantos proveedores de autenticación como desee con el administrador de autenticación (que simplemente ejecuta el objeto Authentication través de todos ellos), pero debe administrar para obtener algún filtro que maneje su esquema de autenticación y llene el objeto Authentication . Si desea que este filtro también interactúe con el usuario (es decir, muestre un formulario de inicio de sesión o algo similar), podría interferir con otros filtros. En ese caso, puede usar cadenas de filtro separadas, pero esto no parece ser necesario en su caso.


De acuerdo, aquí está la solución:

<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>

Espero que esto ayude a alguien en necesidad ...