Estoy teniendo problemas para descubrir exactamente lo que se necesita para implementar con el fin de utilizar un método de autenticación personalizado con mi aplicación web utilizando Spring Security. Tengo una aplicación Grails con el Resorte de Seguridad plugin que utiliza actualmente el estándar de usuario/contraseña de autenticación con un navegador de formulario. Esto está funcionando correctamente.

Necesito implementar un mecanismo en el lado este que implementa un tipo de MAC de autenticación. Si la petición HTTP que contiene varios parámetros (por ejemplo, un identificador de usuario, fecha, firma, etc.) Necesito tomar esos parámetros, realizar algunas operaciones hash y firma/marca de hora de las comparaciones, y, a continuación, autenticar al usuario.

No estoy 100% seguro de por dónde empezar con este. Lo que Spring Security clases necesito ampliar/implementar? He leído el Documentación De Referencia y tener una buena comprensión de los conceptos, pero no estoy realmente seguro de si necesito un Filtro o Proveedor o Administrador, o dónde/cómo exactamente para crear La autenticación objetos. He metido el intento de ampliar AbstractProcessingFilter y/o implementar AuthenticationProvider, pero me acabo de quedar atrapados comprensión de cómo puedo hacer que todos ellos juegan muy bien.

InformationsquelleAutor Rob Hruska | 2009-01-15

3 Comentarios

  1. 23
    1. Implementar una costumbre AuthenticationProvider que recibe toda la información de autenticación de la Authentication: getCredentials(), getDetails(), y getPrincipal().

      Empatar en su Spring Security mecanismo de autenticación mediante la configuración siguiente fragmento de código:

    <bean id="myAuthenticationProvider" class="com.example.MyAuthenticationProvider">
        <security:custom-authentication-provider />
    </bean>
    1. Este paso es opcional, si usted puede encontrar uno adecuado de las implementaciones estándar. Si no, implementar una clase extiende la Authentication interfaz en la que usted puede poner sus parámetros de autenticación:

      (e.g. a user identifier, timestamp, signature, etc.)
      
    2. Extender una costumbre SpringSecurityFilter que ata las dos clases juntas. Por ejemplo, el Filtro puede obtener la AuthenticationManager y llame a authenticate() mediante la implementación de Authentication como entrada.

      Puede ampliar AbstractAuthenticationProcessingfilter como un comienzo.

      Puede hacer referencia a UsernamePasswordAuthenticationFilter que se extiende AbstractAuthenticationProcessingFilter. UsernamePasswordAuthenticationFilter implementa el estándar de nombre de Usuario/Contraseña de Autenticación.

    3. Configurar su Spring Security para agregar o reemplazar el estándar AUTHENTICATION_PROCESSING_FILTER. Para la Primavera de Filtro de Seguridad de órdenes, ver http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html#filter-stack

      Aquí es una configuración fragmento de cómo reemplazarlo con su implementación:

    <beans:bean id="myFilter" class="com.example.MyAuthenticationFilter">
        <custom-filter position="AUTHENTICATION_PROCESSING_FILTER"/>
    </beans:bean>
    • Creo que usted necesita para utilizar el PRE_AUTH_FILTER posición en lugar de AUTHENTICATION_PROCESSING_FILTER. También, usted puede desear mirar en este tutorial para una aplicación de autenticación en Google AppEngine: blog.springsource.com/2010/08/02/…
  2. 1

    Recientemente he puesto un ejemplo de aplicación que realiza la autenticación personalizada con Spring Security 3.
    El código fuente es aquí.
    Más detalles se encuentran en la este blog.

  3. 1

    Aquí es un ejemplo de securityContext.xml archivo de configuración personalizada de autenticationFilter (que se extiende a AUTHENTICATION_PROCESSING_FILTER) y authenticationProvider. El usuario de autenticación de datos es proporcionada por la conexión de jdbc. Configuración de Spring Security 2.0.x

    <?xml version="1.0" encoding="UTF-8"?>
    <sec:global-method-security />
    <sec:http auto-config="false" realm="CUSTOM" create-session="always" servlet-api-provision="true"
    entry-point-ref="authenticationProcessingFilterEntryPoint" access-denied-page="/notauthorized.xhtml"
    session-fixation-protection="migrateSession">
    <sec:port-mappings>
    <sec:port-mapping http="80" https="443" />
    </sec:port-mappings>
    <sec:anonymous granted-authority="ROLE_ANONYMOUS" username="Anonymous" />
    <sec:intercept-url pattern="/**" access="ROLE_ANONYMOUS, ROLE_USER" />
    <sec:logout logout-url="/logoff" logout-success-url="/home.xhtml" invalidate-session="false" />
    </sec:http>
    <bean id="authenticationProcessingFilterEntryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
    <property name="loginFormUrl" value="/login.xhtml" />
    <property name="forceHttps" value="false" />
    </bean>
    <bean id="authenticationProcessingFilter" class="mypackage.CustomAuthenticationProcessingFilter">
    <sec:custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />
    <property name="defaultTargetUrl" value="/" />
    <property name="filterProcessesUrl" value="/logon" />
    <property name="authenticationFailureUrl" value="/loginError.xhtml" />
    <property name="alwaysUseDefaultTargetUrl" value="false" />
    <property name="authenticationManager" ref="authenticationManager" />
    </bean>
    <jee:jndi-lookup id="securityDataSource" jndi-name="jdbc/DB_DS" /> 
    <bean id="myUserDetailsService" class="mypackage.CustomJdbcDaoImpl">
    <property name="dataSource" ref="securityDataSource" />
    <property name="rolePrefix" value="ROLE_" />
    </bean>
    <bean id="apcAuthenticationProvider" class="mypackage.CustomDaoAuthenticationProvider">
    <property name="userDetailsService" ref="myUserDetailsService" />
    <sec:custom-authentication-provider />
    </bean>
    <bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager">
    <property name="providers">
    <list>
    <ref local="apcAuthenticationProvider" />
    </list>
    </property>
    </bean>
    </beans>

Dejar respuesta

Please enter your comment!
Please enter your name here